Визуализатор состояния пинов в arduino ide

Тема в разделе "Глядите, что я сделал", создана пользователем rkit, 21 ноя 2016.

  1. rkit

    rkit Гуру

    Нужен для отладки программ с внесением минимальных изменений в код.
    Возьмем модифицрованный скетч blink, где продолжительность свечения светодиода изменяется в зависимости от потенциомера на ноге A0.

    Код (C++):

    #define TRACE // Для полного отключения отрисовки достаточно закоментировать эту строчку.
    #include <Trace.h> // импортируем нашу библиотеку

    // Настраиваем наш график
    // Скобки круглые!!
    TRACE_INTERRUPT (
      TRACE_DIGITAL(13)
      TRACE_ANALOG(A0)
    )

    void setup() {
      pinMode(A0, INPUT);
      pinMode(13, OUTPUT);
      TRACE_SETUP(50000) // интервал в мкс, через которые считывать данные.
    }

    void loop() {
      unsigned long x = analogRead(A0);
      digitalWrite(13, HIGH);
      delay(x);
      digitalWrite(13, LOW);
      delay(1023 - x);
    }
     
    Заливаем, запускаем, открываем в arduino ide плоттер (ctrl+shift+L), получаем картинку
    blink.jpg
    Верхняя половина показывает значение с пина A0 (TRACE_ANALOG(A0))
    Нижняя состояние пина 13 ( TRACE_DIGITAL(13))
    Наглядно видим, как заполняемость пина 13 изменяется в завимимости от уровня на пине A0


    Кроме того, можно отслеживать произвольные переменные из кода.
    Тут мы просто рисуем синусоиду, но можно, например, сделать переменную, в которую мы запишем отдельные этапы работы программы, и сможем в реальном времени увидеть, как пины работают на каком этапе.
    Код (C++):
    #define TRACE
    #include <Trace.h>

    volatile int y = 0;

    TRACE_INTERRUPT (
      TRACE_VALUE(y, 2000)
    )

    void setup() {
      TRACE_SETUP(50000)
    }

    void loop() {
      y = (sin((float)millis()/1000)+1) * 1000;
    }
     
    sin.jpg


    Библиотека использует библиотеку TimerOne

    Макросы
    #define SERIAL_RATE 9600 - скорость серийного порта
    TRACE_DIGITAL(pin) - рисует состояние цифрового пина. (digitalRead). Относительная высота вывода настраивается макросом #define DIGTAL_HEIGHT 100
    TRACE_ANALOG(pin) - рисует состояние аналогового пина. (analogRead). Относительная высота вывода настраивается макросом #define ANALOG_HEIGHT 100
    TRACE_VALUE(val, max) - рисует состояние целочисленной volatile - переменной в диапазоне от 0 до max. Относительная высота вывода равна max
    TRACE_SETUP(t) - включает отсылку и настраивает интервал в t микросекунд.
     

    Вложения:

    • Trace.zip
      Размер файла:
      1,8 КБ
      Просмотров:
      148
    Radius и Alex19 нравится это.
  2. Alex19

    Alex19 Гуру

    Не знал, что в Arduino IDE есть какой-то плоттер:), теперь буду знать.
     
  3. rkit

    rkit Гуру

    Забыл написать, что этим можно еще и внешние устройства мониторить, просто подключив их к пинам ардуино.
     
  4. Alex19

    Alex19 Гуру

    Что касается отладки таким способом, это дело вкуса, наличие оборудования (не у всех есть лог. анализаторы, осциллографы).

    Мне Ваша идея и сам плоттер будет интересен к примеру, для отображения температуры и выхода ее на заданный уровень в текущем проекте.

    Пару видео о возможностях плоттера.


     
    Securbond нравится это.