Итак, задумав сделать один проект на Arduino, столкнулся - с вопросами отладки кода для микроконтроллера (МК). Если у вас мигают светодиоды, щёлкают реле, жужжат сервоприводы или, на худой конец, что-то выводится на экран, то вопросов нет. Если же приходится отлаживать какую-то внутреннюю работу МК, то...
Самый простой и понятный вариант - вывод контрольной и отладочной информации в последовательный COM-порт, через который, собственно, и идёт загрузка кода в МК. То есть, компьютер по последовательному COM-интерфейсу (пусть и виртуальному, работающему поверх USB) отправляет в память МК скомпилированную прошивку, а МК может в обратную сторону (в компьютер) может отправлять любую текстовую информацию, которую компьютер может отобразить на своём большом и шикарном мониторе.
Делов-то!..
В void setup() {...} прописать Serial.begin() со значением скорости COM-порта и далее уже выводить в Serial Monitor как в консоль - всё что нужно, при помощи простых и понятных методов Serial.println() или Serial.print().
Вроде всё просто. Но как оказалось, не совсем.
У меня вот так сразу это не заработало.
Во-первых, в Serial Monitor-е вместо отладочной информации отображались какие-то непонятные символы. Так называемые "кракозябры", "квадратики", "ромбики" и прочая, прочая псевдографическая нечисть.
Во-вторых, перестал компилироваться и загружаться в МК скетч!
И как оказалось, интернет полон вопросов такого рода!
Все ответы говорят примерно одно и то же - нужно установить одинаковую скорость COM-порта в самом скетче (во время инициализации методом Serial.begin()) и в параметрах Serial Monitor-а:
И у меня это сработало. Однако надёжней будет, если "выставляемая" вами скорость COM-порта будет соответствовать тому её значению, которое установлено в OS и которое использует Arduino IDE. Узнать его можно во время компиляции скетча:
Однако это же ещё не всё!
В какой-то момент, который я не отметил в ходе борьбы за чистоту вывода информации, у меня перестал загружаться в МК скетч!
Решение этой проблемы я тоже нашёл в интернете и оно поражает своей простотой и неочевидностью. Оказывается, всякие раз, когда вы компилируете свой код, вы должны не просто переключиться на вкладку Output (как это делал я, и думал, что этого будет достаточно). Вы должны закрыть вкладку Serial Monitor.
Вот cобственно и всё.
РЕЦЕПТ:
1) Установите скорость последовательного порта одинаковой в Мониторе и в скетче. И лучше - соответствующей реальной скорости COM-порта.
2) Не забывайте закрывать Serial Monitor во время компиляции и загрузки вашего скетча в МК.