如何通过串行通讯正确发送和接收多个传感器的数据

时间:2019-06-03 11:40:00

标签: arduino nodemcu serial-communication

我正在尝试通过串行通信将2个传感器的数据从arduino uno发送到NodeMCU V3,

当我尝试从一个传感器发送数据时,一切正常,但是当我同时使用这两个传感器时,它会提供随机值

这是arduino发件人代码:

int water_sensor_pin = 8;
void setup()
{ pinMode(water_sensor_pin, INPUT);
Serial.begin(115200);
}

void loop()
{  
// First sensor
int soil_moisture=analogRead(A0);  
int output_value = map(soil_moisture,430,70,0,100); 
Serial.write(output_value);

 // Second sensor
 int value = digitalRead(water_sensor_pin); 
 if(value==HIGH){
 Serial.write('1');}

 if(value==LOW){
 Serial.write('0');} 
  }

这是接收者的代码部分

char msg[10];
.
.
.
if(Serial.available()>0){

// First sensor
int output_value = Serial.read(); 
Serial.println(output_value );

// Second sensor
char value = Serial.read(); 
Serial.println(value); 

 }

我希望两个传感器的输出都是正确的值

1 个答案:

答案 0 :(得分:1)

在Arduino中使用Serial时,您必须注意发送已知个字节,然后读取这个个字节。

在发送方尝试使用Serial.write(output_value,4);之类的命令来发送四个字节,在接收方尝试Serial.readBytes(output_value,4);以便读取您发送的四个字节,并且只读取它们。

当然,您可以对要发送的第二个值应用相同的技术,只是在发送布尔值时可能只需要一个字节即可。

希望有帮助!

编辑

如果您要发送buffer of bytes,上述技术将起作用。不幸的是,您有一个整数值……所以您可以尝试:

  • 将值转换为已知大小的char数组,
  • 利用这样一个事实,您要发送的值可以放在single byte中,因此将其声明为byte而不是int,然后读取此单个{{1 }}在接收方。