通信部分-串口事件

本例向你展示SerialEvent()函数的使用。本函数将在loop()中自动被内部调用。
在我们写的代码中如果串口有任何数据(只要不是换行符),那么就将数据加到一个缓存字符串中。在收到换行符时就返回缓存字符串。发送后将会将字符串清空为null。

硬件需求
Arduino板
连接线

电路

不需要额外电路,但是板子必须连接电脑,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;
}
}
}
0
分享到:

评论0

请先

原Arduino365.com域名更改为品牌域名ultirobot.com,承载内容要将更丰富,网站也进行了改版,改善阅读体验。
没有账号? 忘记密码?