Перейти к содержанию

Почему 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(), и все точки сливаются в одну бесконечную строку.

Порядок проверки

  1. Монитор порта. Откройте его и убедитесь, что каждая строка — числа в одном формате.
  2. Скорость. Скорость в окне плоттера должна совпадать с Serial.begin(): для кадра с 8 битами данных Microchip рекомендует расхождение скоростей не больше ±2 % (ATmega328P, табл. 20-2). Как узнать скорость по сигналу — в ответе «Как узнать скорость UART».
  3. Порядок действий. Документация советует открывать плоттер после сообщения о завершении загрузки.
  4. Темп вывода. Если график отстаёт или рывками, скетч печатает больше, чем пропускает порт, — разбор в ответе «Почему Serial.print замедляет программу Arduino».

Тот же формат строк понимает плоттер COM-порта в браузере, а посмотреть сырые байты без графика можно в терминале COM-порта.

Похожие вопросы

Как вывести несколько графиков сразу?

Печатайте значения в одной строке через запятую, пробел или табуляцию и заканчивайте строку println(): каждое значение станет своим рядом. Чтобы ряды были подписаны, ставьте перед значением имя с двоеточием — temp:21.5,hum:40 — так в примере из документации Arduino.

Почему вместо графика ровная линия на нуле или пропуски?

Проверьте строки в мониторе порта: каждая должна содержать одинаковое число значений в одном формате. Строки, где не хватает значения или вместо числа стоит текст, документация Arduino не описывает, и плоттер может разобрать их не так, как вы ждёте (наш вывод). Десятичную запятую не используйте — запятая разделяет значения.

Можно ли смотреть график без Arduino IDE?

Да: плоттер на нашем сайте работает в браузере через Web Serial и понимает тот же формат строк — числа через запятую и пары «имя:значение». Он умеет ещё и сохранять данные в CSV.

Источники

  1. Arduino. Using the Serial Plotter Tool (Arduino IDE 2 documentation) — скетч должен печатать хотя бы одну числовую переменную; пример Variable_1:<значение>,Variable_2:<значение> с println в конце; конец строки — только CR LF или LF, println() добавляет CR LF; разделители — запятая, табуляция или пробел; метка ряда — префикс «имя:», без меток подписи создаются автоматически; плоттер открывают после сообщения о завершении загрузки; ряды можно скрывать флажками
  2. Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet, DS40002061B, 2020 — разд. 20.8.3, табл. 20-2: при 8 битах данных рекомендуемое наибольшее расхождение скорости приёмника и передатчика — ±2,0 %

Нашли ошибку?