本帖最后由 lxf 于 2020-8-17 13:27 编辑
目标
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; |