RPulse
Назначение
Arduino-библиотека RPulse предназначена для обмена информацией с микроконтроллером и мониторинга значений выбранных переменных и датчиков.
Общение с Arduino происходит через последовательный порт. Пользователь может запускать выполнение скетча по команде. Вместе с командой на старт, в микроконтроллер могут передаваться параметры в виде пары ключ-значение. В самом скетче можно запросить значение отправленного параметра.
Отправка параметров пригодится в ситуации, когда алгоритм действий устройства остаётся неизменным, а меняются лишь некоторые параметры. С помощью библиотеки пользователь получает значение параметров и применяет их в скетче, загружает программу в микроконтроллер. Каждый новый запуск устройства затем может сопровождаться отправкой новых значений параметров.
С таким подходом мы избегаем повторной загрузки скетча в память микроконтроллера. Пример задачи, в которой пригодится отправка параметров - изучение PID-регуляторов. Алгоритм вычисления составляющий регулятора будет неизменным, а коэффициенты при составляющих могут быть отправлены перед непосредственным выполнением вычислений.
После получения команды на старт, микроконтроллер начнёт каждые 100 мс отправлять значения отслеживаемых переменных и показания с выбранных пинов. Ниже приведён пример отправляемого сообщения:
p>pin:измерение:251|pin:кнопка:0|var:расстояние:23.7|var:диапазон:52|=103
Такое сообщение может быть обработано сторонним кодом для того, чтобы логировать данные. В конце каждого сообщения есть контрольная сумма (количество байт в строке включая символ =
), чтобы фильтровать некорректные данные.
Библиотека разрабатывалась для проекта приложения предназначенного для мониторинга и визуализации получаемой с устройства информации. Но, думаю, может пригодится и как самостоятельный модуль.
Основные функции
- запуск скетча по команде;
- отправка числовых параметров перед непосредственным запуском основного кода;
- использование полученных значений в коде скетча;
- отслеживание значений на пинах микроконтроллера;
- отслеживание значений переменных
В следующем примере Arduino ждёт команды на запуск и затем каждые 100 мс отправляет через последовательный порт значение переменной dist
:
#include <RPulse.h> // импорт библиотеки RPulse
#define TRIG 7 // пин выходного сигнала
#define ECHO 6 // пин входного сигнала
RPulse pulse; // создание объекта
float dist; // расстояние в сантиметрах
void setup()
{
// настройка пинов
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
// открытие последовательно порта со скоростью 9600 бод
pulse.init(9600);
// отслеживаем значение переменной dist
pulse.watchVar(dist, "Расстояние");
// приостанавливаем программу до получения команды
pulse.wait();
}
void loop()
{
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
dist = pulseIn(ECHO, HIGH) / 58.2;
delay(10); // малая задержка для корректной отправки данных
}
Ссылки
Репозиторий библиотеки на GitHub c инструкцией по установке и подробной документацией к функциям.