Лишние значения при serial передаче
- Войдите на сайт для отправки комментариев
Сб, 05/08/2017 - 22:22
01 |
[code] |
02 |
void setup() { |
03 |
Serial.begin(9600); |
04 |
} |
05 |
06 |
void loop() { |
07 |
while(Serial.available() == 0); |
08 |
int val = Serial.read() - '0'; |
09 |
Serial.println(val); |
10 |
} |
11 |
[/code] |
Простейший код возвращающий введенное число, но у меня возвращаются ещё 2 числа. Так при вводе 1 возвращаются: 1 -35 -38, а без перевода (- '0') это соответствует: 49 13 10. Пробовал на трех платах (две UNO и одна NANO). В чем может быть проблема?
Как всегда проблема в незнании инструмента, которым пользуетесь:
println в отличие от print добавляет в конец символы перевода строки: 13, 10.
Убрал ln, теперь пишет все тоже самое, только в одну строку
Забавная история.
Больше всего порадовал ответ от andriano - как всегда, с апломбом и совершенно не по делу.
Ну а теперь по сути - дело в том, что когда Вы связываетесь с Ардуино через терминал (а, похоже, именно так), то терминал должен понять, что Вы закончили ввод и то, что напечатано на экране, должно быть передано. Для этого Вы нажимаете клавишу "Enter", и с этого момента начинается собственно передача. Но сама по себе данная клавиша создает два символ для передачи, коды которых как раз 13 и 10 (ВК и ПС), которые Вы и принимаете. Посмотрите настройки Вашего терминала, возможно, передачу этих символов можно подавить. Простой способ не заметить данные символы - ввести сравнение с кодом пробела (32) и игнорировать те принятые данные, которые меньше этого значения.
Особую пикантность ситуации придает то, что в эмуляторе Ардуино www.tinkercad.com монитор последовательного порта эти символы на приформировывает и в имитаторе все будет замечательно - приходит один единственный символ ).
Больше всего порадовал ответ от andriano - как всегда, с апломбом и совершенно не по делу.
Ну а теперь по сути - дело в том, что когда Вы связываетесь с Ардуино через терминал...
А что, ТС где-то писал про терминал?
Речь, судя по названию, идет о передаче данных через serial, а не о консольном вводе из терминала. Передача подразумевает вывод данных одним устройством и ввод другим. Не следует путать между собой термины ввод, вывод и передача. ТС говорит о передаче, а Вы - о вводе.
Большое спасибо! Все исправил. Как и сказал GarryC дело было в настройках терминала.
Забавная история.
Больше всего порадовал ответ от andriano - как всегда, с апломбом и совершенно не по делу.
интересно, что именно у andriano было не по делу? Он сказал ровно то же самое, что и вы, только короче и без рисовки.
интересно, что именно у andriano было не по делу?
Arduino может сама себя слушать через порт (один и тот же)???
Ардуино может слушать сама себя даже без порта.
Я сказал, что проблема во входном потоке от терминала к Ардуино, и постарался объяснить, в чем именно, а andriano написал об особенностях передачи от Ардуино к терминалу, что не имеет ни малейшего отношения к обсуждаемому вопросу - вот это разница.
Я сказал, что проблема во входном потоке от терминала к Ардуино, и постарался объяснить, в чем именно, а andriano написал об особенностях передачи от Ардуино к терминалу, что не имеет ни малейшего отношения к обсуждаемому вопросу - вот это разница.
Я никогда не писал и не подразумевал "от Ардуино к терминалу".
Если под терминалом Вы подразумеваете устройство вывода, значит и процесс должен называться "выводом", а не "передачей".
Да ну что спорить. Совершенно очевидно, что первопричиной проблемы было незнание ТС таких базовых вещей, как существование служебных символов CR LF. А уж в какую сторону он их передавал - дело десятое.
Сдается мне, что после комментария GarryC он просто тупо проделал то, что ему сказали, так и не поняв. в чем собственно была проблема.
Если так, то очень жаль, я пытался объяснить явление, а не дать рецепт исправления.
А по поводу реплики andriano, то если println, исполняемая на Ардуино, может передавать данные откуда бы то ни было, кроме как из Ардуино, то я сильно не понимаю свою профессию.
Вместо того, чтобы просто признать, что Вы не совсем поняли ситуацию и считали, будто бы информация передавалась от Ардуино к Ардуино, а не от терминала к Ардуино и назад, что явно следовало из контекста, начинается спор о терминологии и разнице между "выводом" и "передачей" - как же это трудно, признать свою даже не ошибку, а невнимательность.