3 UART в один

NE_XT
NE_XT аватар
Offline
Зарегистрирован: 22.05.2012

Набросал код думал заработает сразу, надо было попробывать перенаправить данные с трех сериалов в ардуино мега, на основной.

Данные приходящие в эти порты успешно появляются в "главном" сериале, вроде все нормально, но при попытке "зажечь" светодиод, ничего не выходит, хотя если послать в главный сериал все работает.

Что я не так сделал ?

Вот кусочек кода:

void loop() {
     
 while (Serial1.available() > 0) { // UART1 to UART
 char a = Serial1.read();
 Serial.write(a);
 }
 while (Serial2.available() > 0) { // UART2 to UART
 char b = Serial2.read();
 Serial.write(b);
 }
 while (Serial3.available() > 0) { // UART3 to UART
 char c = Serial3.read();
 Serial.write(c);
 }
 while (Serial.available() > 0 ) { // UART
 char val = Serial.read();  
 if (val=='w') {   
  digitalWrite(led1, HIGH);
}
  if (val=='q'){
  digitalWrite(led1, LOW);

 

maksim
Offline
Зарегистрирован: 12.02.2012

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

NE_XT
NE_XT аватар
Offline
Зарегистрирован: 22.05.2012

Терминалом отправляю w  в UART светодиод включается, отправляю q выключается ,

тоже самое делаю с  UART1, UART2, UART3...,  в UART приходят или   q,  но  светодиод не включается.

maksim
Offline
Зарегистрирован: 12.02.2012

Так а с чего вдруг он должен зажечься, если у вас то что касается светодиода работает только когда что-то приходит в Serial.?

while (Serial.available() > 0 ) { // UART
  char val = Serial.read();  
  if (val=='w') {   
    digitalWrite(led1, HIGH);
  }
  if (val=='q'){
    digitalWrite(led1, LOW);
  }
}
char val = 0;

void loop() {

  if(Serial1.available() > 0) { // UART1 to UART
    val = Serial1.read();
    Serial.write(val);
  }
  while (Serial2.available() > 0) { // UART2 to UART
    val = Serial2.read();
    Serial.write(val);
  }
  while (Serial3.available() > 0) { // UART3 to UART
    val = Serial3.read();
    Serial.write(val);
  }
  while (Serial.available() > 0 ) { // UART
    val = Serial.read();  
    Serial.write(val);
  }

  if (val=='w') digitalWrite(led1, HIGH);
  if (val=='q') digitalWrite(led1, LOW);
}

 

NE_XT
NE_XT аватар
Offline
Зарегистрирован: 22.05.2012

Спасибо, заработало.