【Arduino】5.串口的使用

本文为旧博客迁移的文章

串口是Arduino与其它设备进行通信的接口,我们需要很好的掌握它的使用。Arduino串口使用相关的函数共有10个(随着版本的升级,新版本加入了更多,具体请参见官网:http://www.arduino.cc/)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Serial.begin(); //开启串口

Serial.end(); //关闭串口

Serial.available();//判断串口缓冲器是否有数据装入

Serial.read(); //读取串口数据

Serial.peek(); //返回下一字节(字符)输入数据,但不删除它

Serial.flush(); //清空串口缓存

Serial.print(); //写入字符串数据到串口

Serial.println(); //写入字符串数据+换行到串口

Serial.write(); //写入二进制数据到串口

Serial.SerialEvent();//read时触发的事件函数

Serial.readBytes(buffer,length);//读取固定长度的二进制流

发送

1
2
3
4
5
6
7
8
9
10
11
12
13
 //Code1  
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);
// set the LCD address to 0x27 for a 16 chars and 2 line display
int i=0;
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println(i);
i++;
}

接收

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 int val;
//定义变量val
int ledpin=13;
//定义数字接口13
void setup() {
Serial.begin(9600);
//设置波特率为9600,这里要跟软件设置相一致。当接入特定设备(如:蓝牙)时,我们也要跟其他设备的波特率达到一致。
pinMode(ledpin,OUTPUT);
//设置数字13 口为输出接口,Arduino 上我们用到的I/O 口都要进行类似这样的定义。
}
void loop() {
val=Serial.read();
//读取PC 机发送给Arduino 的指令或字符,并将该指令或字符赋给val
if(val=='R')//判断接收到的指令或字符是否是“R”。 {
//如果接收到的是“R”字符
digitalWrite(ledpin,HIGH);
//点亮数字13 口LED。
delay(500);
digitalWrite(ledpin,LOW);
//熄灭数字13 口LED
delay(500);
Serial.println("Hello World!");
//显示“Hello World!”字符串
}
}

upload successful

输出ascii码

1
2
3
4
5
6
7
8
9
10
11
int incomingByte =  0;
void setup() {
Serial.begin(9600);
}
void loop() {
if(Serial.available() >0 ) {
incomingByte = Serial.read();
Serial.print("I received: ");
Serial.println(incomingByte,DEC);
}
}

upload successful

Serial.println(incomingByte, DEC);打印接到数据十进制表示的ascii码。

peek():功能类似于read(),但是我们知道当调用一次read()后,缓冲区的数据流会被读取并删除read过的数据,也就是available值会减少,但peek()不会出现类似情况,其功能类似于检测缓冲区的头部数据,反复调用peek()返回的值是一样的。用得好的话可以精简很多代码。

write():写入二进制数据到串行端口。这个数据是作为一个字节或字节序列发送的。如果发送字符串则需要用到print方法。

最后注意一下:当烧程序入板卡的时候,在完成前即LTXRX灯闪烁前,断开数据线很可能损坏硬件。同时测试前养成按一次reset键复位的习惯,这里特别注意,在打开串口监视器后,需要reset一次,否则无法看到效果。

部分文章参考:Arduino串口的使用@yuzhongchun,未经原作者同意。