Всем привет! Соединяю arduino mini и Wemos D2 по rs485. От ардуины - через RX/TX, от wemos - SoftwareSerial. Везде 9600. Использую платки max485. И вроде бы бегает... Но КАЖДЫЙ 9-й байт бьётся. Вот пример: Чуть-чуть меняем сообщение, и получаем: Чую, что где-то они с контролем чётности не договорились, но как её явно выставить-то? Ни в Serial, ни в SoftwareSerial не нашёл. Только скорость. Знатоки, подскажите, куда копать? PS: На ардуине SoftwareSerial поднять сложно - там все ноги заняты уже...
а если скорость увеличить\уменьшить? SoftwareSerial он сильно глючный, если есть возможность, нужно использовать аппаратный
Точно каждый восьмой? По примеру и не скажешь. А напрямую без 485 пробовали? Для отсечения непоняток. Сообщения идут только в одну сторону, без переключения прием-передача?
Да, ошибся Каждый 9-й. Напрямую не пробовал, пока переключений нет, но планируются. Вечером попробую снизить скорость и напрямую соединить тоже.
Фух. Попробовал и так и сяк. Если скорость ставить 4800, то всё ещё хуже. Бьётся чуть не каждый второй. Убрал SoftwareSerial, включил в аппаратный - те же яйца. Т.е. 9-й байт битый. Скорость аппаратного 9600. Может на rs485 чтой-то подкрутить?
Может в буфере на прием - передачу косяк? Всякая там четность, это один - два байта и в принципе дальше поток срывается и валит мусор. А тут шибко далеко от начала и заплёван только один байт.
Менять пока не пробовал. Массивов практически нет - буфера сообщений есть, конечно, но я там использую strcat, что довольно безопасно. Переполнений тоже нет, буфера часто сбрасываются, размер там с большим запасом. Кстати, возможно принимается-то нормально, а вот отсылается на log-сервер (использую MQTT) с ошибкой, попробую посмотреть в это место. Завтра поэкспериментирую и отпишусь.
Разобрался Проблема была в этом куске кода: Код (C++): digitalWrite(DIRECTION, HIGH); delay(10); Serial.write(iobuf); delay(10); // <-- проблема тут digitalWrite(DIRECTION, LOW); Т.е. тупо данные не успевали отправится, как отрубался передатчик. Как только повысил задержку до 100, всё стало отправляться.