Имею ардуино уно и некий девайс который в последовательный порт выдает данные. вот пример данных от девайса в hex B2 82 это заголовок, следующие 4 байта это данные. завел это дело в Ардуино и пробую получить эти данные и ничего не выходит. почему то значения которые получает ардуино с последовательного порта отличаются. Для получения цифр использовал совсем простой скетч который 6 значений подряд читает и их выводит на экран. Им на ЛСД выводятся цифры 253 95 0 147 101 159. переводим в hex и получаем не то же самое что в терминале на компе. Код (Text): // Подключаем стандартную библиотеку LiquidCrystal #include <LiquidCrystal.h> // Инициализируем объект-экран, передаём использованные // для подключения контакты на Arduino в порядке: // RS, E, DB4, DB5, DB6, DB7 LiquidCrystal lcd(4, 5, 10, 11, 12, 13); byte inByte1 = 0; // incoming serial byte byte inByte2 = 0; byte inByte3 = 0; byte inByte4 = 0; byte inByte5 = 0; byte inByte6 = 0; void setup() { Serial.begin(19200); // устанавливаем размер (количество столбцов и строк) экрана lcd.begin(20, 4); lcd.setCursor(0, 1); lcd.print("Waiting for data"); } void loop() { while (Serial.available() == 0) ; //read data inByte1 = Serial.read(); inByte2 = Serial.read(); inByte3 = Serial.read(); inByte4 = Serial.read(); inByte5 = Serial.read(); inByte6 = Serial.read(); // output data to LCD lcd.clear(); lcd.setCursor(0, 0); lcd.print(inByte1); lcd.setCursor(4, 0); lcd.print(inByte2); lcd.setCursor(0, 1); lcd.print(inByte3); lcd.setCursor(4, 1); lcd.print(inByte4); lcd.setCursor(0, 2); lcd.print(inByte5); lcd.setCursor(4, 2); lcd.print(inByte6); delay(1000); } причем цеплял тх с устройства одновременно на рх ардуино и рх на ком порте на компьютере и в терминале на компьютере видел те же цифры что выше, не совпадающие с теми цифрами что на экране. не пойму в чем ошибка моя? то что получаю в терминале на компе соответвует даташиту от девайса, так что там точно верные данные. а вот в ардуино у меня чтото не то читается.
сейчас только подумал. возможно проблема в том что параметры соединения в ардуино и в девайсе не совпадают? вот из спецификации на девайс выкопировка.
while (Serial.available() < 6) ; Это точно нужно сделать, иначе можете правильно читать первый байт, а остальные читать еще до того, как они примутся. А у девайса какой порт? RS-232? Ардуино понимает 0В как "0" и 5В как "1", а в RS-232 "0" передается отрицательным напряжением, а "1" положительным. Не может проблема в этом быть? И ссылку на даташит дайте на всякий случай.
да, это я уже понял, исправил. ссылка на даташит вот. девайс - широкополосный лямбда-зонд Innovate LC-1 http://www.innovatemotorsports.com/support/downloads/Seriallog-2.pdf только я тут подумал что там не 5в а 12в. питается девайс по крайней мере 12в.
Если тут говорится о нем, то выходит, что нужно паять конвертер. Микросхема MAX-232 или аналог + 4 конденсатора, можно их напаять прямо на микросхему, подпаять провода и сунуть все в термоусадку.