lxf 发表于 2020-7-12 08:49:53

第40课 串口通讯字符和字符串接收

本帖最后由 lxf 于 2020-8-17 13:27 编辑

第40课 串口通讯字符和字符串接收

目标
1、使用read函数读取串口接收到数据2、使用peek函数读取串口接收到数据3、使用+=运算符拼接字符串,串口读取字符串
实验材料
Arduino UNO开发板配套USB数据线Arduino IDE软件

内容
案例1:使用read函数读取串口接收到数据,在串口监视器中分别输入“H”和“HELLO”,点击发送,查看结果。
程序实现代码
char X;    //定义一个字符型变量x
void setup() {
Serial.begin(9600);    //设置串口波特率9600
}
void loop() {
while(Serial.available()>0)//循环串口是否有数据
{
X=Serial.read();    //获取串口接收到的数据
Serial.println(X);    //串口打印接收到的数据
}
}
打开串口监视器,输入“H”,点击发送,查看结果

打开串口监视器,输入“HELLO”,点击发送,查看结果

案例2:使用peek函数读取串口接收到数据,在串口监视器中分别输入“H”和“HELLO”,点击发送,查看结果。
程序实现代码
char X;    //定义一个字符型变量x
void setup() {
Serial.begin(9600);    //设置串口波特率9600
}
void loop() {
while(Serial.available()>0)    //循环串口是否有数据
{
X=Serial.peek();   //获取串口接收到的数据
Serial.println(X);
delay(1000);//延迟1秒
}
}
打开串口监视器,输入“H”,点击发送,查看结果
(每隔1秒读取H)
打开串口监视器,输入“HELLO”,点击发送,查看结果
(因为peek在读取数据时不会移除缓存区的数据,因此每次都只读取H)
串口接收到的数据都会暂时存放在接受缓冲区中,使用read和peek函数都是从接受缓冲区中读取数据,不同的是,使用read读取数据后会将该数据从接收缓冲区中删除,而用peek读取数据时,不会移除接收缓冲区中的数据。
Serial.peek()
返回传入的串行数据的下一个字节(字符),而不是进入内部串行缓冲器读取,也就是说,连续调用peek()将返回相同的字符,与调用read()方法相同。
案例3:使用+=运算符拼接字符串,串口读取字符串,在串口监视器中输入“HELLO”,点击发送,查看结果。
程序实现代码
char X;   //定义一个字符型变量x
void setup() {
Serial.begin(9600);   //设置串口波特率9600
}
void loop() {
String inString = "";   //定义一个字符串变量inString,赋值为空,即缓存清空
while(Serial.available()>0)   //循环串口是否有数据
{
X=Serial.read();//获取串口接收到的数据
inString+= X;//通过复合+运算,叠加数据到inString
delay(10);//延迟10ms
}
if (inString!="")   //如果inString有数据
{
Serial.println(inString);//打印inString数据
}
}
打开串口监视器,输入“HELLO”,点击发送,查看结果

拼接字符串

由于使用read函数,每次只能读取一个字节数据,如果想要读取一个字符串,则需要用+=运算符拼接字符串。复合加+=示例i+=5; //相当于 i = i + 5;
页: [1]
查看完整版本: 第40课 串口通讯字符和字符串接收