【发布时间】:2019-01-07 16:36:09
【问题描述】:
我通过无线技术 (xbee) 从 Arduino 1(路由器)的 3 个传感器发送 3 组数据到另一个 Arduino(协调器):
在协调器上,我完美地从这 3 个传感器(来自路由器)接收无线数据。数据流是这样的(每个传感器数据都在其线上):
22.5624728451
944
8523
我希望将这 3 个值作为 3 个不断更新的变量,然后将这些值传递给程序的其余部分,以在 LCD 上打印或其他内容:
温度=22。 5624728451
气体=944
烟雾=8523
最初,我只有 2 个传感器,我将这 2 个传感器的数据发送如下:
22.5624728451944(22.5624728451 - 温度,944 - 气体)我在同一行收到了它们,并将所有内容分成两个变量(使用 readString.substring() ),代码如下。但是现在我有 3 个传感器,我在单独的一行上接收数据,因为我不知道每个数据字符串的长度……而且我不能使用相同的技术(只发送一个包含所有传感器数据的字符串)同一行,然后将它们分开)
我的旧代码:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12,11,10,9,8,7);
String temperature;
String gas;
String readString;
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
}
void loop() {
while (Serial.available() > 0)
{
char IncomingData = Serial.read();
readString += IncomingData ;
temperature = readString.substring(0, 13); //get the first 13 characters
gas = readString.substring(13, 16); //get the last 3 characters
Serial.print(IncomingData); //here I have my string: 20.1324325452924 wichs is updating properly when I have sensor values changes
// Process message when new line character is DatePrimite
if (IncomingData == '\n')
{
Serial.println(temperature);
lcd.setCursor(0,0);
lcd.write("T:");
lcd.print(temperature);
delay(500);
temperature = ""; // Clear DatePrimite buffer
Serial.println(gaz);
lcd.begin(16, 2);
lcd.setCursor(0,1);
lcd.write("G:");
lcd.print(gas);
delay(500);
gaz = ""; // Clear DatePrimite buffer
readString = "";
}
}
}
我现在要做的就是为不断更新的每个传感器数据(3 行 - 每行 3 个变量)分配一个变量,然后将这些值传递给程序的其余部分。有谁知道如何修改代码以在这种情况下工作? 提前谢谢!
【问题讨论】:
-
谢谢。我会尝试你的第一个建议。我不明白的替代建议,但我会尝试使用分隔符的方法。非常感谢你!祝你有美好的一天!
标签: string arduino xbee node-xbee