Непонятные символы в мониторе порта Arduino
В девяти случаях из десяти причина — разная скорость. Число в Serial.begin(…) в скетче и скорость, выбранная в мониторе порта (список справа вверху монитора, например «9600 baud»), должны совпадать.
void setup() {
Serial.begin(9600); // это число
Serial.println("Проверка связи");
}
void loop() {
}Если в скетче Serial.begin(115200), в мониторе тоже выберите 115200. Текст, уже напечатанный на неверной скорости, останется мусором — нажмите RESET на плате, чтобы скетч начал сначала.
Если скорость совпадает
- Монитор открыт для другого порта. Монитор работает с портом, выбранным в списке плат. Если подключено несколько устройств, проверьте, что выбрана нужная плата.
- Что-то на выводах 0 и 1. Модуль Bluetooth, GPS или провод на
RXиTXсмешивает свои данные с данными платы. Отключите его или перенесите на другие выводы. - Мусор только в самом начале. При открытии монитора плата перезагружается, и первые байты иногда приходят искажёнными. Это нормально и на работу скетча не влияет.
- Мусор появляется при запуске мотора или реле. Помехи и просадка питания перезагружают плату или искажают передачу. Моторы и реле — от отдельного источника питания с общим GND.
- Неверная частота платы. Если для платы на 8 МГц (например, Pro Mini на 3,3 В) выбран вариант на 16 МГц, скорость обмена получается в два раза другой. Проверьте Tools → Board и Tools → Processor.
Монитор пустой
- Не вызван
Serial.begin— без него ничего не печатается. - Печать стоит в
setup, а монитор открыт после неё: на Uno и Nano при открытии монитора плата перезапускается, иsetupвыполнится снова. На платах со встроенным USB (Leonardo, Micro) этого нет: чтобы не потерять первые строки, вsetupпослеSerial.beginдобавляютwhile (!Serial) {}— скетч ждёт, пока откроется монитор. - Скетч завис раньше печати: например, ждёт датчик, которого нет. Поставьте
Serial.printlnв самое началоsetupи посмотрите, до какого места доходит выполнение.
Русские буквы
Arduino IDE 2 сохраняет скетч в UTF-8 и так же показывает текст в мониторе, поэтому строки вроде Serial.println("Проверка связи") выводятся нормально. Если русский текст в мониторе искажён, а латиница нет — скетч, вероятно, сохранён в другой кодировке старым редактором. Откройте его в Arduino IDE 2, перепечатайте русские строки и сохраните.
Русские буквы в UTF-8 занимают по 2 байта, поэтому длинные русские строки быстрее расходуют память. Храните их во флеш-памяти через F("…"): Serial.println(F("Проверка связи"));.
На дисплеях LCD 1602 русских букв обычно нет вовсе — это свойство дисплея, а не монитора (справка Как подключить дисплей LCD 1602 по I2C).