串口输出

在许多实际应用场合中我们会要求在 Arduino 和其它设备之间实现相互通信,而最常见通常也是最简单的办法就是使用串行通信。在串行通信中,两个设备之间一个接一个地来回发送数字脉冲,它们之间必须严格遵循相应的协议以保证通信的正确性。

在 PC 机上上最常见的串行通信协议是 RS-232 串行协议,而在各种 微控制器(单片机)上采用的则是 TTL 串行协议。由于这两者的电平有很大的不同,因此在实现 PC 机和微控制器的通信时,必须进行相应的转换。完成 RS-232 电平和 TTL 电平之间的转换一般采用专 用芯片,如 MAX232 等,但在 Arduino 上是用相应的电平转换电路来完成的。

实现

根据 Arduino 的原理图可以看出,ATmega 的 RX 和 TX 引脚一 方面直接接到了数字 I/O 端口的 0 号和 1 号管脚,另一方面又通过电 平转换电路接到了串口的母头上。因此,当我们需要用 Arduino 与PC 机通信时,可以用串口线将两者连接起来;当我们需要用 Arduino与微控制器(如另一块 Arduino)通信时,则可以用数字 I/O 端口的0 号和 1 号管脚。

为了实现数据的发送,Arduino 则提供了 Serial.print()和 Serial.println()两个函数,它们的区别在于后者会在请求发送的数 据后面加上换行符,以提高输出结果的可读性。

1
2
3
4
5
6
7
void setup() { 
Serial.begin(9600);
}
void loop() {
Serial.println("Hello World!");
delay(1000);
}

检验

为了检查串口上是否有数据发送,一个比较简单的办法是在数字 I/O端口的 1 号管脚(TX)和 5V 电源之间接一个发光二极管,如下面的 原理图所示:

检查串口是否有数据发送

这样一旦 Arduino 在通过串口向 PC 机发送数据时,相应的发光二极管就会闪烁,实际应用中这是一个非常方便的调试手段。