Получение странных символов из Arduino
Мой Arduino подключен к ультразвуковому датчику, и я пытаюсь считать с него значение. Когда я попытался запустить «tail -f > /dev/ttyACM0», мой Arduino отправляет какие-то странные символы, которые я не могу расшифровать
2 ответа
Похоже, вам не удалось настроить порт на стороне Linux. К
по умолчанию он настроен на неизвестно какую скорость передачи данных и на «приготовленный»
режим, в котором данные предварительно обрабатываются драйвером ядра. Вы хотите
вместо этого установите правильную скорость передачи данных и режим «raw». stty
(что означает «установить терминал») делает следующее:
stty -F /dev/ttyACM0 raw 9600
Замените 9600 на любую скорость передачи данных, которую использует ваш Arduino.
Если ваша программа Arduino попытается прочитать последовательный порт, она увидит эхо отправляемых символов. В этом случае вы, вероятно, захотите отключите также это эхо:
stty -F /dev/ttyACM0 raw -echo 9600
Я сделал это с правильной скоростью передачи данных, но никаких изменений в выводе не произошло., @Santhoshkumar Sundararaj
@SanthoshkumarSundararaj: Возможно, что-то не так с кодом отправки. Попробуйте заменить его чем-нибудь тривиальным, например void setup(){Serial.begin(9600);} voidloop(){Serial.println("Hello!");}
., @Edgar Bonet
К сожалению, я не могу изменить код. Я работаю с автономным автомобилем AUDI. Итак, он имеет четыре микроконтроллера Arduino, соединенных с пятью ультразвуковыми датчиками. Моя задача — установить соединение и получить значения от arduino., @Santhoshkumar Sundararaj
Скорее всего, это неверная скорость передачи данных. Вы можете попробовать использовать программу, предназначенную для последовательных портов, мой личный выбор - picocom, но можно использовать minicom или любую другую:
$ picocom -b 9600 /dev/ttyACM0
Параметр -b
используется для указания скорости передачи данных, в зависимости от скетча это может быть другое значение, кроме 9600, наиболее распространенные: 9600, 14400, 19200, 28800, 38400, 57600
Другое решение — настроить /dev/ttyACM0
на правильную скорость передачи данных с помощью stty
:
stty -F /dev/ttyACM0 9600 cs8 -cstopb -parenb
Это настроит последовательный порт на скорость 9600 бит/с, 8 бит, 1 стоповый бит, без четности и позволит команде tail
правильно прочитать его, если параметры связи соответствуют тому, что отправляет Arduino.
Я пробовал оба, но все равно выдает одни и те же странные символы., @Santhoshkumar Sundararaj
- Как разделить входящую строку?
- Как вывести несколько переменных в строке?
- В чем разница между Serial.write и Serial.print? И когда они используются?
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Программы построения последовательных данных
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Очистить существующий массив при получении новой последовательной команды
Ты
ссти
?, @Edgar BonetЧто это значит? Вы можете объяснить?, @Santhoshkumar Sundararaj
В дополнение к ответам обязательно укажите «Serial.println(sensorValue, DEC)», чтобы убедиться, что он напечатан в десятичном формате, а не в виде отдельных неправильных символов ASCII., @Paul
Вы смотрели, какие данные возвращаются в шестнадцатеричном или двоичном формате? Это может облегчить проверку того, использует ли источник другую страницу набора символов в Юникоде. Графические символы не являются стандартными ASCII. Я видел упоминание об источнике Audi, так что, возможно, набор символов европейский., @Kelly S. French
Другой пост выглядит похоже: (https://arduinoprosto.ru/q/12617/arduino-serial-monitor-shows-strange-ascii-characters?rq=1), и я должен спросить, есть ли у вас какая-либо документация или ссылка на датчик. С такой же вероятностью данные будут отправляться в двоичном формате. Есть ли у вас основания подозревать, что это должны быть значения ASCII?, @Kelly S. French