本例向你展示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;
}
}
}
串口事件
当新的串口数据到来时,我们会将它添加到一个缓存字符串中。当收到换行符时就将缓存字符串
输出到串口监视器并将字符串清空。
本例程的最好测试方式是使用不断发送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;
}
}
}
请先
!