【问题标题】:How to send and receive correctly more than one sensor's data via serial communication如何通过串行通信正确发送和接收多个传感器的数据
【发布时间】:2019-06-03 11:40:00
【问题描述】:

我正在尝试通过串行通信将 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); 

 }

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

【问题讨论】:

    标签: arduino nodemcu serial-communication


    【解决方案1】:

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

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

    当然,您可以对要发送的第二个值应用相同的技术,只是您可能只需要一个字节,因为您似乎发送了一个布尔值。

    希望对你有帮助!

    编辑

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

    • 将您的值转换为已知大小的char 数组,
    • 使用您尝试发送的值可以放入single byte 的事实,从而将其声明为byte 而不是int,然后在接收方读取此单个byte

    【讨论】:

    • 假设我转换了char的值ti数组,接下来我该怎么做?
    • 通常您应该能够使用write(your_array, len_of_the_array) 发送它并在另一侧使用readBytes() 阅读它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多