找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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


目标

1、使用read函数读取串口接收到数据
2、使用peek函数读取串口接收到数据
3、使用+=运算符拼接字符串,串口读取字符串

实验材料

Arduino UNO开发板
配套USB数据线
Arduino IDE软件

图片1.png

内容

案例1:使用read函数读取串口接收到数据,在串口监视器中分别输入“H”和“HELLO”,点击发送,查看结果。

程序实现代码

  1. char X;    //定义一个字符型变量x
  2. void setup() {
  3. Serial.begin(9600);    //设置串口波特率9600
  4. }
  5. void loop() {
  6. while(Serial.available()>0)  //循环串口是否有数据
  7. {
  8.   X=Serial.read();    //获取串口接收到的数据
  9.   Serial.println(X);    //串口打印接收到的数据
  10.   }
  11. }
复制代码

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

微信图片_20200712085101.png

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

微信图片_20200712085237.png

案例2:使用peek函数读取串口接收到数据,在串口监视器中分别输入“H”和“HELLO”,点击发送,查看结果。

程序实现代码

  1. char X;    //定义一个字符型变量x
  2. void setup() {
  3. Serial.begin(9600);    //设置串口波特率9600
  4. }
  5. void loop() {
  6. while(Serial.available()>0)    //循环串口是否有数据
  7. {
  8.   X=Serial.peek();   //获取串口接收到的数据
  9.   Serial.println(X);
  10. delay(1000);  //延迟1秒
  11.   }
  12. }
复制代码

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

微信图片_20200712085402.png
(每隔1秒读取H)

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

微信图片_20200712085402.png
(因为peek在读取数据时不会移除缓存区的数据,因此每次都只读取H)

串口接收到的数据都会暂时存放在接受缓冲区中,使用read和peek函数都是从接受缓冲区中读取数据,不同的是,使用read读取数据后会将该数据从接收缓冲区中删除,而用peek读取数据时,不会移除接收缓冲区中的数据。

Serial.peek()

返回传入的串行数据的下一个字节(字符),而不是进入内部串行缓冲器读取,也就是说,连续调用peek()将返回相同的字符,与调用read()方法相同。

案例3:使用+=运算符拼接字符串,串口读取字符串,在串口监视器中输入“HELLO”,点击发送,查看结果。

程序实现代码

  1. char X;   //定义一个字符型变量x
  2. void setup() {
  3. Serial.begin(9600);   //设置串口波特率9600
  4. }
  5. void loop() {
  6. String inString = "";   //定义一个字符串变量inString,赋值为空,即缓存清空
  7. while(Serial.available()>0)   //循环串口是否有数据
  8. {
  9.   X=Serial.read();  //获取串口接收到的数据
  10.   inString+= X;  //通过复合+运算,叠加数据到inString
  11.   delay(10);  //延迟10ms
  12.   }
  13. if (inString!="")   //如果inString有数据
  14. {
  15.   Serial.println(inString);  //打印inString数据
  16.   }
  17. }
复制代码

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

微信图片_20200712085403.png

拼接字符串

由于使用read函数,每次只能读取一个字节数据,如果想要读取一个字符串,则需要用+=运算符拼接字符串。
复合加+=示例
i+=5; //相当于 i = i + 5;
分享至 : QQ空间
收藏

0 个回复

您需要登录后才可以回帖 登录 | 立即注册