我正在使两个arduino通过Serial进行通信。它有效,但是存在结构性问题:当我从一个arduino发送数据时,另一个不知道她收到了什么...
是否可以为每个通信添加一个“标题”;一种与事件进行正确通信的方法,就像使用套接字或HTTP一样。 有图书馆可以实现这一目标吗?
我想对JSON进行序列化和反序列化,以便在数据中添加一个“标题”,但这太过分了。
答案 0 :(得分:0)
您可以使用类似于serial.parseint()的方法来中断串行传输,然后寻找标题。如果用逗号分隔所有逗号,那么您将知道第一个解析出来的将是标题。解析逗号的arduino示例如下所示:
void loop() {
// if there's any serial available, read it:
while (Serial.available() > 0) {
// look for the next valid integer in the incoming serial stream:
int red = Serial.parseInt();
// do it again:
int green = Serial.parseInt();
// do it again:
int blue = Serial.parseInt();
// look for the newline. That's the end of your sentence:
if (Serial.read() == '\n') {
// constrain the values to 0 - 255 and invert
// if you're using a common-cathode LED, just use "constrain(color, 0, 255);"
red = 255 - constrain(red, 0, 255);
green = 255 - constrain(green, 0, 255);
blue = 255 - constrain(blue, 0, 255);
// fade the red, green, and blue legs of the LED:
analogWrite(redPin, red);
analogWrite(greenPin, green);
analogWrite(bluePin, blue);
// print the three numbers in one string as hexadecimal:
Serial.print(red, HEX);
Serial.print(green, HEX);
Serial.println(blue, HEX);
}
}
}
获取标头后,可以执行switch()语句以检查大小写: 例如
while (Serial.available() > 0) {
int header = Serial.parseInt();
...
switch (header){
case header1:
code here...
break;
case header2:
code here...
break;
default:
break;
}