Проблема с uart у arduino mega

Omnexy
Offline
Зарегистрирован: 23.11.2017
Всем доброго времени суток.
В одном своём проекте я пытался передать на комп данные с нескольких ардуино nano.
Чтобы передавать всё на один COM порт, связал их по uart с arduino mega(ибо у неё их 4), а с неё уже отправлял на ПК по usb, однако на выходе получаются неверные значения, плюс мега постоянно видит какие-то данные на вход портов, и даже если ничего не подключать к ним, отправляет 0. Напрямую с nano на комп пробовал отправлять, всё работает, следовательно, думаю, что-то не так делаю с мегой
 
Вот код меги
void setup() {
  Serial.begin(9600);
  Serial1.begin(9600);
  Serial2.begin(9600);
  Serial3.begin(9600);
  Serial.println("Node ready");
}

void loop() {
  String a = "";
  if(Serial1.available() > 0)
  {
    a = (String)Serial1.read();
    Serial.println(a);
  }
  if(Serial2.available() > 0)
  {
    a = (String)Serial2.read();
    Serial.println(a);
  }
  if(Serial3.available() > 0)
  {
    a = (String)Serial3.read();
    Serial.println(a);
  }
  delay(1000);
}
В чём может быть ошибка? 
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Если я правильно понимаю, что этот код должен быть простым рипитером - что получил, то и отдал, то написано неправильно. Нафига Вы преобразуете типы? Получаете байт и отправляйте байт, не надо ничего менять. В строке 10 замените String на byte,  в строках 13, 18, 23 выбросьте "(String)", а в строках 14, 19, 24 замените println на write.

Omnexy
Offline
Зарегистрирован: 23.11.2017

Евгений, вы правильно понимаете, простой репитер, но с nano я передаю именно в строковом формате(там значения float, их мне проще привести к String, чем к byte), так что преобразование идёт только там, (String) в 13, 18 и 23 добавил из-за того, что при компиляции ошибка выдавалась(что-то про невозможность приведения int к string, убрал обратно, теперь не ругается, не знаю, что это было), и на компе программа на Java принимает строковые переменные, так что write не нужен 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ну, не знаю, Вы не показали как Вы их передаёте, но это и не важно.

Вот передаёте Вы из Нано в строковом формате или в каком угодно другом - в любом! По любому Вам здесь надо тупо передать дальше  ровно то, что Вы прнияли. Сделайте как я сказал и посмотрите.