Как правильно отправлять и получать более одного датчика с помощью последовательной связи - PullRequest
0 голосов
/ 03 июня 2019

Я пытаюсь отправить данные 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 Ответ

1 голос
/ 03 июня 2019

При использовании Serial в Arduino вы должны позаботиться об отправке известного количества байтов, а затем прочитать это количество байтов.

Вкл.передающая сторона пытается что-то вроде Serial.write(output_value,4);, чтобы отправить четыре байта, а на принимающей стороне Serial.readBytes(output_value,4);, чтобы прочитать четыре отправленных вами байта и только их.

Конечно, вы можете применитьта же техника для второго значения, которое вы хотите отправить, за исключением того, что вам может понадобиться только один байт, как вы, кажется, отправляете логическое значение.

Надеюсь, это поможет!

РЕДАКТИРОВАТЬ

Техника, описанная выше, будет работать, если у вас будет буфер байтов для отправки.К сожалению, у вас есть целочисленное значение ... Так что вы можете попытаться:

  • преобразовать ваше значение в массив char известного размера,
  • использовать тот факт, что значениевы пытаетесь отправить, может поместиться в однобайтный и, таким образом, объявить его как byte вместо int и затем прочитать этот единственный byte на стороне получателя.
...