自白
我是一名大四应届生,第一次写这个博客,可能很多地方写的不是那么好,也有可能有些理解不对,所以请多谅解!写这篇文章是因为我发现Arduino的串口通讯相关的文章对很多小白不太友好,我这篇文章是我自己实践过后得出的简单易懂的教程,之后会继续推出Arduino串口通讯控制外设的文章!
启动串口通讯
Serial.begin()
描述:
开启串口,通常置于setup()函数中。
原型:
Serial.begin(speed)
Serial.begin(speed, config)
参数:
speed:波特率,一般取值9600,115200等。
config:设置数据位、校验位和停止位。默认SERIAL_8N1表示8个数据位,无校验位,1个停止位。
返回值:
无。
void setup() {
Serial.begin(9600); //启动串行通讯
}
判断串口接收数据的语句
Serial.available()
描述:
判断串口缓冲区的状态,返回从串口缓冲区读取的字节数。
原型:
Serial.available()
参数:
无。
返回值:
可读取的字节数。
Serial.readBytesUntil()
描述:
从串口读取指定长度的字符到缓存数组。
当函数读取到终止字符后,会立即停止函数执行。
原型:
Serial.readBytesUntil(character, buffer, length)
参数:
character:终止字符。
buffer:缓存变量。
length:设定的读取长度。
返回值:
返回存入缓存的字符数。
实践
一个三位数整数
假如我们要从串口接收一个三位数的整数并且通过回车符就能实现接收完毕
首先我们需要准备三个参数变量的声明
int value = 0;
char input[6];
char nextinput = '\n';
然后我们需要限制在串口缓存区必须有数据,不然一直执行空语句
while(Serial.available()<=0) {}
最后我们需要判断在当串口缓存区有数据时则开始执行我们的接收语句
if(Serial.available()>0) {
Serial.readBytesUntil(nextinput,input,4);
value = atoi(input); //强制转换字符串数组input为int型变量value
}
三个三位数整数
假如我们要从串口接收三个三位数的整数并且通过回车符就能实现接收完毕
首先我们需要准备四个参数变量的声明
int value[3];
char input1[6];
char input2[6];
char input3[6];
char blanket = ' ';
char nextinput = '\n';
然后我们需要限制在串口缓存区必须有数据,不然一直执行空语句
while(Serial.available()<=0) {}
最后我们需要判断在当串口缓存区有数据时则开始执行我们的接收语句
if(Serial.available()>0) {
Serial.readBytesUntil(blanket,input1,4);
Serial.readBytesUntil(blanket,input2,4);
Serial.readBytesUntil(nextinput,input3,4);
value[0] = atoi(input1); //强制转换
value[1] = atoi(input2); //强制转换
value[2] = atoi(input3); //强制转换
}
文章中有些语句的解释用到原作者的一篇文章:
Arduino基础入门篇23—串口通讯.
还有Arduino官网串口使用指南
Arduino官网串口使用指南.