Приветствую. Подскажите как правильно настроить передачу данных по UART с arduino DUE на arduino MEGA?
DUE принимает по usb порту данные в реальном времени, постоянно. 35 байт. На основе принятых данных включаются те или иные светодиоды, вращаются сервоприводы. (Параллельно работает как hid устройство по второму порту) - короче симулятор приборной панели))) привет ETS.
И вот к ней появилась необходимость добавить дисплей, чтобы отображать часть приходящих данных (например время, статус круиз контроля, уровень повреждений, и тд.)
Дисплей с разрешением 480x320 на чипе 9488 удалось завести, но spi очень медленный и отрисовка блочила ход программы. Изза этого большая задержка на светодиодах и сервы ведут себя непредсказуемо и тд.
Было принято решение дисплей поменять на вот такой:
вот такой воткнуть в мегу, а по UART отдать часть приходящих данных. (около 15 байт)
И вот тут понадобилась помощь. Данные пока тестовые, но проблема есть - данные доходят но
меняются местами все время. Привожу примеры скетчей.
Подключение: DUE TX1 -> MEGA RX1 ну и земли замкнуты.
Как ограничить количество байт и вообще правильно все построить?!
DUE - отправитель
#define PACKET_SYNC 0xFF
void setup() {
Serial.begin(255000); // это usb с компа
Serial1.begin(9600);
}
void loop() {
//1
Serial1.write(PACKET_SYNC);
//2
Serial1.write(120);
//3
Serial1.write(66);
//4
Serial1.write(200);
}
MEGA - приниматель
#define PACKET_SYNC 0xFF
int serial_byte;
void setup() {
Serial.begin(9600); //вместо дисплея пока на тестах гляжу просто в монитор порта
Serial1.begin(9600);
Serial.println("reset");
}
void loop() {
//1
serial_byte = Serial1.read();
//if (serial_byte != PACKET_SYNC) return;
//проверка пока закрыта, она конечно частично решает вопрос но отправка все равно скачет и иногда вообще
//заканчивается
Serial.println(serial_byte);
//2
serial_byte = Serial1.read();
Serial.println(serial_byte);
//3
serial_byte = Serial1.read();
Serial.println(serial_byte);
//4
serial_byte = Serial1.read();
Serial.println(serial_byte);
Serial.println("------------");
delay(200);
}