Arduino通讯串口

串口是Arduino与其它设备进行通信的接口
所有的Arduino控制板有至少一个串口(又称作为UART或USART)。它通过0(RX)和1(TX)数字引脚经过串口转换芯片连接计算机USB端口与计算机进行通信。因此,如果你使用这些功能的同时你不能使用引脚0和1作为输入或输出
Arduino Mega 有三个额外的串口:Serial 1使用19(RX)和18(TX),Serial 2使用17(RX)和16(TX),Serial3使用15(RX)和14(TX);若要使用这三个引脚与您的个人电脑通信,你需要一个额外的USB转串口适配器,因为这三个引脚没有连接到Mega上的USB转串口适配器,若要用它们来与外部的TTL串口设备进行通信,将TX引脚连接到您的设备的RX引脚,将RX引脚连接到您的设备的TX引脚,将GND连接到您的设备的GND,(不要直接将这些引脚直接连接到RS232串口;他们的工作电压在+/- 12V,可能会损坏您的Arduino控制板。)
Serial.begin(9600); //开启串行通信接口并设置通信波特率
if (Serial) //表示指定的串口是否准备好
比较囧的是,这个方法只适用于Leonardo和micro的Serial
Arduino Mega 特有:
if (Serial1)
if (Serial2)
if (Serial3)
Serial.available(); //获取从串口能够读取有效的字节数
这是已经传输到,并存储在串行接收缓冲区(能够存储64个字节)的数据。 available()继承了 Stream类
注意使用时通常用delay(100)以保证串口字符接收完毕
仅适用于Arduino Mega :
Serial1.available()
Serial2.available()
Serial3.available()
Serial.end() 停用串行通信,使RX和TX引脚用于一般输入和输出。要重新使用串行通信, 需要 Serial.begin()语句
Serial.read();
读取串口数据,一次读一个字符,读完后删除已读数据
返回串口缓存中第一个可读字节,当没有可读数据时返回-1,整数类型
bl=Serial.findUntil("ell","|"); 从串行缓冲区读取数据,直到找到一个给定字符串或字符串终止位;
如果目标字符串被发现,该函数返回true,如果超时则返回false
参数1 要搜索的字符串
参数2 终止位
Serial.flush(); 等待输出数据传送完毕
Serial.peek(); 读取下一字节
读串口缓存中下一字节的数据(字符型),但不从内部缓存中删除该数据。也就是说,连续的调用peek()将返回同一个字符
返回串口缓存中下一字节(字符)的数据,如果没有返回-1,整数int型
while(Serial.read()>= 0){} 清空缓存
因Serial.read()函数读取串口缓存中的一个字符,并删除已读字符。因此可以用这句代码来清空串口缓存
s=Serial.parseInt();//从缓冲区读取一个int整数
Serial.print(); 串口输出数据函数,写入字符串数据到串口
语法:
Serial.print(val)
Serial.print(val,format)
val: 打印的值,任意数据类型 ; format: 输出的数据格式,包括整数类型和浮点型数据的小数点位数
示例
Serial.print(78, BIN) 得到 "1001110" BIN表示二进制
Serial.print(78, OCT) 得到 "116" OCT表示8进制
Serial.print(78, DEC) 得到 "78" DEC表示10进制--默认
Serial.print(78, HEX) 得到 "4E" HEX表示16进制
Serial.print(1.23456, 0) 得到 "1" 取0位小数
Serial.print(1.23456, 2) 得到 "1.23" 取2位小数
Serial.print('N') 得到 "N" 输出字符串
Serial.println(); 与Serial.print()类似 后面自动加入换行
int x=Serial.readBytes(buffer,length); 从串口读取指定长度length的字符到缓存数组buffer
返回存入缓存的字符数,0表示没有有效数据
Serial.readBytesUntil(character,buffer,length); 从串口缓存读取指定长度的字符到数组buffer,遇到终止字符character后停止
character : 终止的字符 (char)
buffer: 存储读取数据的缓存(char[] 或byte[])
返回存入缓存的字符数,0表示没有有效数据
String comdata =Serial.readString(); 从串口缓存区读取全部数据到一个字符串型变量
返回从串口缓存区中读取的一个字符串--包括\n
String comdata =Serial.readStringUntil(terminator); 从串口缓存区读取字符到一个字符串型变量,直至读完或遇到某终止字符
terminator:终止字符(char型)
返回值 从串口缓存区中读取的整个字符串,直至检测到终止字符
float comfloat=Serial.parseFloat(); 读串口缓存区第一个有效的浮点型数据,数字将被跳过。当读到第一个非浮点数时函数结束
返回值 返回串口缓存区第一个有效的浮点型数据,数字将被跳过
int comInt=Serial.parseInt() 从串口接收数据流中读取第一个有效整数(包括负数)
注意:非数字的首字符或者负号将被跳过;当可配置的超时值没有读到有效字符时,或者读不到有效整数时,分析停止;如果超时且读不到有效整数时,返回0
返回值 返回下一个有效整型值
Serial.find() 从串口缓存区读取数据,寻找目标字符串target(char型)
语法:
char target[] = ”目标字符串”;
Serial.find(target);
返回值 找到目标字符串返回真,否则为假
Serial.findUntil(target,terminal);从串口缓存区读取数据,寻找目标字符串target(char型数组),直到出现终止字符串terminal(char型数组),找到为真,否则为假
Serial.write(); 串口输出数据函数。写二进制数据到串口
语法 Serial.write(val) val: 字节
Serial.write(str) str: 一串字节
Serial.write(buf, len) buf: 字节数组 len: buf的长度
返回值 字节长度
Serial.SerialEvent(); 串口数据准备好时触发的事件函数,即串口数据准备好调用该函数
语法:Serial.serialEvent{//statements}
statements: 任何有效的语句
当使用print()发送一个数据时,Arduino发送的并不是数据本身,而是将数据转换成字符(无论是何种类型的数据,如int a=100数据也会被转化为三个char型数据,即’1’ .’0’.’0’),再将字符翻译成ASCII码发送出去,串口监视器接收到ASCLL码,则会显示对应的字符(串口监视器会自动进行ASCII码翻译工作)。因此,使用print()函数是以ASCLL码的形式输出数据到串口。
而当使用write()函数时,Arduino发送的是数值本身,省略了把字符转化为ASCII码的过程。串口监视器接收到数据后,也会将数值当做ASCLL码而显示其对应的字符(write()函数只支持发送0~255整型数据)
资料:https://blog.csdn.net/iracer/article/details/50334041
Arduino通讯串口的更多相关文章
- 手机与Arduino蓝牙串口通讯实验及完整例程
安卓手机与Arduino之间采用蓝牙串口通讯,是很多智能装置和互动装置常用的控制方法,简单而有效,无需网络环境,很实用的技术. 实验采用Arduino UNO板,加了一块1602LCD屏做显示(因为只 ...
- C#与Arduino通过串口通信来控制LED灯的状态
一.引言 最近摆弄了一段时间的Arduino,发现Arduino做一些电子类项目.监控.机器人.电子玩具比较容易,并且Arduino与.NET程序集成也不难.接下来介绍一个简单的小程序,C#做的一个W ...
- 关于arduino清空串口缓存(转)
在arduino1.0之前的版本 Serial.flush()的作用是是清空串口缓存( dropping received incoming data).但在1.0之后的版本 Serial.flush ...
- 【ARDUINO】串口无法打开问题
1.查看是否串口被锁 sudo arduino ls /var/lock sudo rm /var/lock/LCK..ttyACM* 2.查看arduino安装位置 dpkg -S XXXX 3.原 ...
- Arduino通过串口监视器收发数据
在串口监视器中发送数据,板子收到数据并打印出来. 不需要额外电路,但是板子必须连接电脑,Arduino IDE的串口监视器也需要被打开. 代码 /* 串口事件 当新的串口数据到来时,我们会将它添加到一 ...
- Arduino在串口监视器上输出字母表
程序会在Arduino IDE的串口监视器上输出一个字母表. 不需要额外电路,但是板子必须通过串口线或USB线连接到电脑. 代码 程序在setup()函数中建立串口连接,然后逐行输出a~z的字母I表, ...
- [Arduino] 在串口读取多个字符串,并且转换为数字数组
功能如题目.在串口收到逗号分割的6串数字比如100,200,45,4,87,99然后在6个PWM端口3, 5, 6, 9, 10, 11输出对应PWM值代码注释很详细了,就不再说明了. //定义一个c ...
- PMS5003ST+Arduino Nano 串口读取数据
先上代码: 库文件是在guihub上的大神写的https://github.com/jbanaszczyk,我拿来小改下用以支持5003ST #include <Arduino.h> #i ...
- Arduino 433 + 串口
http://www.freebuf.com/articles/wireless/105398.html /*本作品使用的例程中包含RCSwitch库文件用于信号的解码和编码发送*/ #include ...
随机推荐
- android开发错误经验总结
TextView: 1.textView.setText();参数如果直接传int类型,ide不会显示错误.但是运行会报错. 布局渲染: 1. <View android:background= ...
- 红帽学习笔记[RHCSA] 第九课[文件归档、硬盘、分区以及自动挂载、Swap、链接]
文件归档 tar是什么 通过tar命令可以将大型文件汇集成一个文件(归档),注意没有压缩功能. 压缩方式 gzip 通过gzip过滤文档,使用最广泛 bzip2 通常比gzip压缩小,但是不如gzip ...
- Spring Boot 深度调优,6得飞起~
项目调优 作为一名工程师,项目调优这事,是必须得熟练掌握的事情. 在SpringBoot项目中,调优主要通过配置文件和配置JVM的参数的方式进行. 一.修改配置文件 关于修改配置文件applicati ...
- [集合]Map
Map集合的功能概述 a:添加功能 * V put(K key,V value):添加元素.* 如果键是第一次存储,就直接存储元素,返回null * 如果键不是第一次存在,就用值把以前的值替换掉, ...
- CF和OF的区别
进位标志CF和溢出标志OF的区别: 有符号数和无符号数只是认为的进行区分,计算机从来不区分有符号数和无符号数.对于运算的数来说,只要符合进位的情况,CF就置1.只要符合溢出的情况,OF就置1.但是后续 ...
- 封装 多态 类的约束 super
python面向对象的三大特性:继承,封装,多态. 1. 封装: 把很多数据封装到⼀个对象中. 把固定功能的代码封装到⼀个代码块, 函数, 对象, 打包成模块. 这都属于封装的思想. 具体的情况具体分 ...
- python day1-requests
一.什么是requests Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库. 相对于urllib库(自带,无需手动安装)而言, ...
- 逆向与反汇编实战(一)--PEiD分析复现
1.准备 简介: PEiD(PE Identifier)是一款著名的查壳工具,其功能强大,几乎可以侦测出所有的壳,其数量已超过470 种PE 文档 的加壳类型和签名. 整个过程需要测试文件成品:htt ...
- CentOS服务器安装Anaconda
今天拿到了服务器,但是需要的环境都没有,从头开始配. 需要的环境很多,从装Anaconda开始. 版本相关:输入命令 cat /etc/redhat-release,我的版本是 CentOS Linu ...
- Antd时间选择框汉化问题总结------国际化全局设置
import zh_CN from 'antd/lib/locale-provider/zh_CN'; import 'moment/locale/zh-cn'; import { ConfigPro ...