Arduino上与计算机通信最常用的方式就是串口通信,本文讲解下Arduino下使用串口以及使用串口接收发、发送数据。
在Arduino控制器上,串口都是位于0 (RX)和1 (TX)的两个引脚, Arduino 的USB口通过一个转换芯片(通常为ATmega16 u2)与这两个串口引脚连接。该转换芯片会通过USB接口在计算机上虚拟出一个用于与Arduino通信的串口。
当Arduino控制器使用USB线与计算机相连时,两者之间便建立了串口连接。通过此连接,Arduino控制器可与计算机相互传数据了。
Arduino中与串口相关的函数有Serial. begin()、Serial.available()、Serial.read()、Serial.println()和Serial.print()这五个函数;下面分别介绍如何使用串口。
一、串口初始化
要想使串口与计算机通信,需要先使用Serial. begin()函数初始化Arduino的串口通信功能,即 Serial.begin(speed); 其中参数speed指串口通信波特率,它是设定串口通信速率的参数。串口通信的双方必须使用同样的波特率方能正常进行通信。波特率可以设置为300、600、1200、2400、4800、9600、14400等,波特率越大,串口通信的速率也就越高。常用的波特率为9600。
二、串口输出
串口初始化完毕后,便可以使用Serial.print()和Serial.println()函数向计算机发送数据了。函数的用法是:
- Serial.print(val); 其中val为要输出的信息,各种类型的数据即可。
- Serial.println(val); 与Serial.print()类似,不同的是Serial.println()函数会在输出指定数据后,再输出一组回车换行符。
串口输出示例程序:
int counter = 0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
counter = counter + 1;
Serial.print(counter);
Serial.print(':');
Serial.println(" Hell World!");
delay(100);
}
下载程序到Arduino开发板,点开IDE右上角的窗口监视器,就可以看到串口的输出信息了。如下图:
三、串口接收数据
使用串口同样可以接收由计算机发出的数据。接收串口数据需要使用Serial. read()函数,用法是:
Serial.read();
调用该语句,每次都会返回1字节的数据,该返回值便是当前串口读到的数据。
使用串口时,Arduino会在SRAM中开辟一段大小为64 B的空间,串口接收到的数据都会被暂时存放在该空间中,称这个存储空间为缓冲区。使用Serial.available()函数检测缓冲区是否有可读数据,该函数的用法是:
Serial.available();
Serial.available()函数的返回值是当前缓冲区中接收到的数据字节数。在使用时,先检测缓冲区中是否有可读的数据,如果有,则使用Serial. read()函数读取,没有则跳过或者等待再读取。
串口读数据的示例程序如下:
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
if(Serial.available()>0){
char ch=Serial.read();
Serial.print(ch);
}
}
程序下载到Arduino后,打开串口监视器,键入并发送任何信息,则会看到Arduino接收该信息,并且将同样的信息通过串口输出。