🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## **串口事件** > 本例向你展示**SerialEvent()**函数的使用。本函数将在**loop()**中自动被内部调用。  > 在我们写的代码中如果串口有任何数据(只要不是换行符),那么就将数据加到一个缓存字符串中。在收到换行符时就返回缓存字符串。发送后将会将字符串清空为**null**。 ### **所需硬件** * Arduino板或Genuino板 * 连接线 ### **电路** ![图片来自官网](http://img.blog.csdn.net/20160519191937368)  不需要额外电路,但是板子必须连接电脑,Arduino IDE的串口监视器也需要被打开。 ### **代码** ~~~ /* 串口事件 当新的串口数据到来时,我们会将它添加到一个缓存字符串中。当收到换行符时就将缓存字符串 输出到串口监视器并将字符串清空。 本例程的最好测试方式是使用不断发送NMEA 0183语句的GPS接收器模块 代码公开。 */ String inputString = ""; // 缓存字符串 boolean stringComplete = false; // 是否string已经完成缓存 void setup() { // 初始化串口: Serial.begin(9600); // 将inputString反转200个字符: inputString.reserve(200); } void loop() { // 如果缓存string接收完成: if (stringComplete) { Serial.println(inputString); // 清空String: inputString = ""; stringComplete = false; } } /* SerialEvent在arduino板上的RX引脚收到数据时会被系统自动调用。在系统内部,它是在每次loop函数执行时连带执行的。因此如果再loop使用delay,serialEvent的调用也会被延迟,这样就有可能一次收到>=2个字符。 */ void serialEvent() { while (Serial.available()) { // 获取新的字符: char inChar = (char)Serial.read(); // 将它加到inputString中: inputString += inChar; // 如果收到了换行符,就将一个“旗标”变量设置为true,这样loop函数就知道inputString已经缓存完成了: if (inChar == '\n') { stringComplete = true; } } } ~~~ ### **相关资料** [SerialEvent()](https://www.arduino.cc/en/Reference/SerialEvent)