Найти в Дзене
Компаратор

Отладка Arduino через Serial Monitor: Проблемы и решения

Итак, задумав сделать один проект на Arduino, столкнулся - с вопросами отладки кода для микроконтроллера (МК). Если у вас мигают светодиоды, щёлкают реле, жужжат сервоприводы или, на худой конец, что-то выводится на экран, то вопросов нет. Если же приходится отлаживать какую-то внутреннюю работу МК, то...

Самый простой и понятный вариант - вывод контрольной и отладочной информации в последовательный COM-порт, через который, собственно, и идёт загрузка кода в МК. То есть, компьютер по последовательному COM-интерфейсу (пусть и виртуальному, работающему поверх USB) отправляет в память МК скомпилированную прошивку, а МК может в обратную сторону (в компьютер) может отправлять любую текстовую информацию, которую компьютер может отобразить на своём большом и шикарном мониторе.

Делов-то!..

В void setup() {...} прописать Serial.begin() со значением скорости COM-порта и далее уже выводить в Serial Monitor как в консоль - всё что нужно, при помощи простых и понятных методов Serial.println() или Serial.print().

Вроде всё просто. Но как оказалось, не совсем.

У меня вот так сразу это не заработало.
Во-первых, в
Serial Monitor-е вместо отладочной информации отображались какие-то непонятные символы. Так называемые "кракозябры", "квадратики", "ромбики" и прочая, прочая псевдографическая нечисть.

-2

Во-вторых, перестал компилироваться и загружаться в МК скетч!

И как оказалось, интернет полон вопросов такого рода!

Все ответы говорят примерно одно и то же - нужно установить одинаковую скорость COM-порта в самом скетче (во время инициализации методом Serial.begin()) и в параметрах Serial Monitor-а:

-3

И у меня это сработало. Однако надёжней будет, если "выставляемая" вами скорость COM-порта будет соответствовать тому её значению, которое установлено в OS и которое использует Arduino IDE. Узнать его можно во время компиляции скетча:

-4

Однако это же ещё не всё!
В какой-то момент, который я не отметил в ходе
борьбы за чистоту вывода информации, у меня перестал загружаться в МК скетч!

Решение этой проблемы я тоже нашёл в интернете и оно поражает своей простотой и неочевидностью. Оказывается, всякие раз, когда вы компилируете свой код, вы должны не просто переключиться на вкладку Output (как это делал я, и думал, что этого будет достаточно). Вы должны закрыть вкладку Serial Monitor.

Вот cобственно и всё.

РЕЦЕПТ:

1) Установите скорость последовательного порта одинаковой в Мониторе и в скетче. И лучше - соответствующей реальной скорости COM-порта.

2) Не забывайте закрывать Serial Monitor во время компиляции и загрузки вашего скетча в МК.