欢迎光临
我们一直在努力

通信部分-串口事件

本例向你展示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;
}
}

未经允许不得转载:Arduino-Maker » 通信部分-串口事件

支付宝扫码打赏 微信打赏

原创文章,若帮到您,欢迎打赏

分享到:更多 ()

评论 抢沙发

评论前必须登录!

 

线上商城

中贝斯特创客空间蘑菇云创客教育