arduino的串口通信
arduino提供了非常强大的串口通信函数,这可能是我唯一觉得arduino的优点
他可以使用简单的函数配置和使用串口与其他设备进行通信
当然串口通信还是要看单片机是否有指定的IO
也不是所有的IO都支持串口
arduino的串口是否接收到数据
1 | Serial.available() |
| 参数 | 数据类型 | 作用 | 选项 |
|---|---|---|---|
| 返回值 | 无 | 无 | 无 |
该函数将会返回等待读取的数据字节数
等待读取的数据字节数。
arduino的禁用串口
1 | Serial.end() |
| 参数 | 数据类型 | 作用 | 选项 |
|---|---|---|---|
| 返回值 | int | 返回等待读取的数据字节数 | 等待读取的数据字节数 |
终止串行通讯,包括rx,tx
可调用 Serial.begin()重新打开串行通讯。
arduino的查找串口是否有指定数据
1 | Stream.find(target) |
| 参数 | 数据类型 | 作用 | 选项 |
|---|---|---|---|
| target | char / char* / `String |
要搜索的目标字符/字符串(区分大小写) | 无 |
| 返回值 | bool(布尔型) | — | — |
target为数据内容:
被查找字符串。
允许使用String或char类型。
返回值:如果接收到的数据内容一致就会返回真(不为0的数)
否者就是假(0)bool类型
arduino的查找串口是否有指定数据带结束
1 | Stream.findUntil(target, terminator) |
| 参数 | 数据类型 | 作用 | 选项 |
|---|---|---|---|
| target | 允许使用String或char类型 | 开始执行数据内容 | 无 |
| terminator | 允许使用String或char类型 | 终止的数据内容 | 无 |
| 返回值 | bool(布尔型) | 如果串口读取到的和开始执行数据内容一致 | — |
target开始执行数据内容:
允许使用String或char类型。如果串口读取到的和开始执行数据内容一致
就会返回真,否者为假
terminator终止的数据内容:
用于设置终止函数执行的字符串信息。
设备在读取数据时一旦读取到此终止字符串,将会结束函数执行并返回。
可以用于开始和结束函数
arduino的串口数据提取整形类型的数据
1 | Serial.parseInt() |
| 参数 | 数据类型 | 作用 | 选项 |
|---|---|---|---|
| — | — | 被查找字符串 | — |
| 返回值 | long | 在输入信息中找到的整数数值 | — |
| 返回值: | |||
| 在输入信息中找到的整数数值。类型:long | |||
| 其他数据会丢失 |
arduino的串口数据提取浮点型类型的数据
1 | Serial.parseFloat() |
| 参数 | 数据类型 | 作用 | 选项 |
|---|---|---|---|
| — | — | 被查找字符串 | — |
| 返回值 | float | 在输入信息中找到浮点数值 | — |
返回值:
在输入信息中找到浮点数值。类型:float
arduino的串口初始化设置波特率
1 | Serial.begin(speed) |
| 参数 | 数据类型 | 作用 | 选项 |
|---|---|---|---|
| speed | — | 设置波特率 | 看下方 |
| 返回值 | 无 | 无 | 无 |
speed为波特率:
设置电脑与Arduino进行串口通讯时的数据传输速率(每秒传输字节数)。
可使用以下速率:300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, 115200等
你也可以根据你所使用的设备而设置其他传输速率。(数据类型: long)
arduino的串口发送一个字节
1 | Serial.write(val) |
| 参数 | 数据类型 | 作用 | 选项 |
|---|---|---|---|
| val(字节) | — | 只发送单个字节 | 比如发送123就会变成0x49 0x50 0x51 |
| str(字符串) | — | 发送一串 | 比如发送123就会变成0x49 0x50 0x51 |
| buf(字节数组) | — | 把字节存里面 | — |
| len(长度) | — | 发送多少的字节 | — |
| 返回值 | 无 | 会返回发送的字节数 | 无 |
val是字节:
0x(xx)
str是字符串:
比如发送123就会变成0x49 0x50 0x51
buf是字节数组:
创建数组,把字节存里面
len是长度:
发送多少的字节
返回值:
会返回发送的字节数。
arduino的串口发送数据
1 | Serial.print(val, format) |
| 参数 | 数据类型 | 作用 | 选项 |
|---|---|---|---|
| val | — | 模式为工作模式 | — |
| format | — | 指定小数点的位数 | 看下方 |
| 返回值 | 无 | 会返回发送的字节数 | 无 |
val在这里是模式:
如果忽略format参数,只用val的指定模式的情况下,默认以ASCII码形式发送
1 | Serial.print(val) |
模式:
BIN (binary二进制)
OCT (octal八进制)
DEC (decimal十进制)
HEX (hexadecimal十六进制)
format是指定小数点的位数:输入具体的数字来指定多少位
Serial.print(78, BIN) 发送 “1001110”
Serial.print(78, OCT) 发送 “116”
Serial.print(78, DEC) 发送 “78”
Serial.print(78, HEX) 发送 “4E”
Serial.println(1.23456, 0) 发送 “1”
Serial.println(1.23456, 2) 发送 “1.23”
Serial.println(1.23456, 4) 发送 “1.2346”
你可以用F()把待发送的字符串包装到flash存储器。例如:
1 | Serial.print(F(“Hello World”)) |
arduino的串口发送数据带换行
1 | Serial.println(数据, 模式) |
| 参数 | 数据类型 | 作用 | 选项 |
|---|---|---|---|
| val | — | 模式为工作模式 | 看上方 |
| format | — | 指定小数点的位数 | 看上方 |
| 返回值 | 无 | 会返回发送的字节数 | 无 |
具体参数不多说和上面的一样,只是多了换行
arduino的串口读取一个字节(非数据流)
1 | Serial.peek(); |
| 参数 | 数据类型 | 作用 | 选项 |
|---|---|---|---|
| 返回值 | int | 看下方 | 无 |
读取一个字节的数据,如果没数据返回值为0,
如果是一串数据的话,第一个数据读出后不会消失所以只能读取第一个数据
使用read可以读取一串数据
arduino的串口读取字符串
1 | Serial.readString() |
| 参数 | 数据类型 | 作用 | 选项 |
|---|---|---|---|
| 返回值 | String | 看下方 | 无 |
返回值:
接收到的数据,类型为字符串。
arduino的串口读取字符串带终止
1 | Serial.readStringUntil(terminator); |
| 参数 | 数据类型 | 作用 | 选项 |
|---|---|---|---|
| terminator | — | 终止符用于设置终止函数执行的字符信息 | — |
| 返回值 | String | 接收到的数据 | 无 |
终止符:
终止字符。用于设置终止函数执行的字符信息。
设备在读取数据时一旦读取到此终止字符,将会结束函数执行。允许使用char类型。
返回值:
接收到的数据,类型为字符串。
arduino的串口读取一个字节(数据流)
1 | Serial.read() |
| 参数 | 数据类型 | 作用 | 选项 |
|---|---|---|---|
| 返回值 | int | 看下方 | 无 |
返回值:
设备没有接收到数据时,返回值为-1
设备接收到数据时,返回值为接收到的数据流中的1个字符
函数可用于从设备接收到数据中读取一个字节的数据。
读取数据流,数据会放缓存里面,
读取一个数据就会丢失一个数据,下一个数据就会替换上去
arduino的串口读取数据并且存储在数组中
1 | stream.readBytes(buffer, length) |
| 参数 | 数据类型 | 作用 | 选项 |
|---|---|---|---|
| buffer | char或者byte | 用于存储读取到的信息 | — |
| length | int | 是读取字节上限 | — |
| 返回值 | int | 实际成功读取到的字节数量 | 无 |
buffer是变量/数组:
用于存储读取到的信息。允许使用char或者byte类型的变量或数组。
length是读取字节上限:
指定的字节数量后就会停止运行。允许使用int类型
arduino的串口读取数据并且存储在数组中带停止
1 | stream.readBytesUntil(character, buffer, length) |
| 参数 | 数据类型 | 作用 | 选项 |
|---|---|---|---|
| character | — | 终止符用于设置终止函数执行的字符信息 | — |
| buffer | char或者byte | 用于存储读取到的信息 | — |
| length | int | 是读取字节上限 | — |
| 返回值 | int | 实际成功读取到的字节数量 | 无 |
character是终止字符:
用于设置终止函数执行的字符信息。设备在读取数据时一旦读取到此终止字符
将会结束函数执行。允许使用char类型。
buffer是变量/数组:
用于存储读取到的信息。允许使用char或者byte类型的变量或数组。
length是读取字节上限:
指定的字节数量后就会停止运行。允许使用int类型
arduino的查找串口设置缓存区
1 | Serial.flush() |
flush函数不具备清楚缓存效果
当我们通过Serial.print或Serial.println来发送数据时,被发送的字符数据将会存储于开发板的“发送缓存”中。
这么做的原因是开发板串行通讯速率不是很高,如果发送数据较多,发送时间会比较长。
在没有使用flush函数的情况下,开发板不会等待所有“发送缓存”中数据都发送完毕再执行后续的程序内容。
也就是说,开发板是在后台发送缓存中的数据。程序运行不受影响。
相反的,在使用了flush函数的情况下,开发板是会等待所有“发送缓存”中数据都发送完毕以后,再执行后续的程序内容。
补充:
清除接收缓存
1 | void setup() { |
使用方法:
1、Serial.begin(波特率);先配置波特率
2、 Serial.print(数据, 模式);发送
3、Serial.read();读取
如果要使用多个串口
Serialx.begin();x不填就是默认UART0,1就是UART1
比如
Serial1.begin()就是使用UART1
Serial2.begin()就是使用UART2