Почему Serial Plotter в Arduino IDE не показывает график?
Обновлено Редакция GAW
Serial Plotter в Arduino IDE 2 не анализирует произвольный текст: он ждёт строку чисел на каждую точку графика. Если скетч печатает что-то другое, плоттер открывается, но график пуст. По документации Arduino строка выглядит так: значения через запятую, табуляцию или пробел, необязательные метки «имя:» и перевод строки в конце.
Что печатает скетч и что видит плоттер
| Код в loop() | Что уходит в порт | График |
|---|---|---|
Serial.print(value); | 512512512… без разделителей | нет: нет конца строки |
Serial.println(value); | 512 и CR LF | один ряд |
Serial.print(a); Serial.print(","); Serial.println(b); | 512,300 и CR LF | два ряда |
Serial.print("t:"); Serial.print(t); Serial.print(",h:"); Serial.println(h); | t:21.5,h:40 и CR LF | ряды t и h |
Serial.println("Temp = 21.5 C"); | текст со словами | формат не из документации — разбор не гарантирован |
Плоттер распознаёт как конец строки только LF или CR LF; Serial.println() добавляет CR LF сам (документация Arduino IDE 2). Наш вывод: самая частая ошибка — последнее значение напечатано через print(), а не println(), и все точки сливаются в одну бесконечную строку.
Порядок проверки
- Монитор порта. Откройте его и убедитесь, что каждая строка — числа в одном формате.
- Скорость. Скорость в окне плоттера должна совпадать с
Serial.begin(): для кадра с 8 битами данных Microchip рекомендует расхождение скоростей не больше ±2 % (ATmega328P, табл. 20-2). Как узнать скорость по сигналу — в ответе «Как узнать скорость UART». - Порядок действий. Документация советует открывать плоттер после сообщения о завершении загрузки.
- Темп вывода. Если график отстаёт или рывками, скетч печатает больше, чем пропускает порт, — разбор в ответе «Почему Serial.print замедляет программу Arduino».
Тот же формат строк понимает плоттер COM-порта в браузере, а посмотреть сырые байты без графика можно в терминале COM-порта.
Похожие вопросы
Как вывести несколько графиков сразу?
Печатайте значения в одной строке через запятую, пробел или табуляцию и заканчивайте строку println(): каждое значение станет своим рядом. Чтобы ряды были подписаны, ставьте перед значением имя с двоеточием — temp:21.5,hum:40 — так в примере из документации Arduino.
Почему вместо графика ровная линия на нуле или пропуски?
Проверьте строки в мониторе порта: каждая должна содержать одинаковое число значений в одном формате. Строки, где не хватает значения или вместо числа стоит текст, документация Arduino не описывает, и плоттер может разобрать их не так, как вы ждёте (наш вывод). Десятичную запятую не используйте — запятая разделяет значения.
Можно ли смотреть график без Arduino IDE?
Да: плоттер на нашем сайте работает в браузере через Web Serial и понимает тот же формат строк — числа через запятую и пары «имя:значение». Он умеет ещё и сохранять данные в CSV.
Источники
- Arduino. Using the Serial Plotter Tool (Arduino IDE 2 documentation) — скетч должен печатать хотя бы одну числовую переменную; пример Variable_1:<значение>,Variable_2:<значение> с println в конце; конец строки — только CR LF или LF, println() добавляет CR LF; разделители — запятая, табуляция или пробел; метка ряда — префикс «имя:», без меток подписи создаются автоматически; плоттер открывают после сообщения о завершении загрузки; ряды можно скрывать флажками
- Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet, DS40002061B, 2020 — разд. 20.8.3, табл. 20-2: при 8 битах данных рекомендуемое наибольшее расхождение скорости приёмника и передатчика — ±2,0 %
Нашли ошибку?
Смотрите также
- Плоттер COM-портаWeb Serial: графики до 8 рядов, формат Arduino, статистика, CSV
- Терминал COM-портаWeb Serial: текст и HEX, отправка с \r\n, DTR и RTS, журнал
- UARTКадр 8N1, скорость и допуск, TX и RX, уровни, USB–UART, AVR и STM32
- Почему Serial.print замедляет программу Arduino?Буфер 64 байта полон — print ждёт линию; на 9600 бод ~1 мс на байт
- Как узнать скорость UART?Самый короткий импульс — один бит: скорость = 1 / t