С помощью библиотеки можно отправлять через последовательный интерфейс информацию с пинов микроконтроллера и значения выбранных переменных.
Перед началом работы скетча можно отправить набор параметров, которые затем используются в программе. Таким образом отпадает необходимость переписывать код и загружает его заново.
Библиотека RPulse зависит от библиотеки GyverTimers. В первую очередь, установите её.
Этот способ предпочтительнее, потому что Arduino IDE самостоятельно будет следить за обновлениями библиотеки и предложит их загрузить.
Откройте Arduino IDE. Откройте Менеджер библиотек. Для этого выберите пункт меню Инструменты - Управлять библиотеками или нажмите комбинацию клавиш Ctrl + Shift + I. В появившемся окне наберите в строке поиска название библиотеки и нажмите кнопку Установка. Через некоторое время последняя версии библиотеки будет загружена и установлена.
Если на компьютере нет доступа в интернет, нужно использовать этот способ.
По ссылке перейдите на страницу релиза последней версии. В разделе Assets скачайте архив с названием Source code (zip). Файл будет называться RPulse-[версия].zip.
Перед установкой новой версии библиотеки из zip-файла, удалите предыдущую версию!
Откройте Arduino IDE. Выберите пункт меню Скетч - Подключить библиотеку - Добавить .ZIP библиотеку... . В появившемся диалоговом окне выберите сохранённый ранее архив.
Перезапустите Arduino IDE.
Библиотека установлена.
Примеры можно найти в меню Файл - Примеры - RPulse.
Для быстрого старта используйте пример Template.
Для импорта библиотеки в скетч, нужно добавить в начале следующую строку:
#include <RPulse.h>Добавить эту строку можно вручную или с помощью меню Скетч - Подключить библиотеку - RPulse.
Перед тем, как обращаться к методам, нужно создать объект класса RPulse:
#include <RPulse.h> // подключение библиотеки
// объект класса RPulse создаётся вне функции setup() и loop()
RPulse pulse;
void setup(){
// начальная настройка
}
void loop(){
// главыный цикл Arduino-скетча
}Для инициализации подключения нужно использовать следующий метод:
void init(baudRate = 9600, timer = T1);baudRate - скорость передачи данных в бод. По умолчанию используется скорость 9600 бод, timer - выбор аппаратного таймера. Оба параметра имеют значения по умолчанию. Вызов метода нужно разместить в функции setup():
void setup(){
pulse.init(9600); // открытие подключения
}Метод можно вызвать без параметров. Тогда скорость подключения будет равна 9600 бод, будет использоваться аппаратный таймер Timer1:
void setup(){
pulse.init(); // открытие подключения
}Параметр timer может принимать следующие значения, соответствующие аппаратным таймерам:
T0- Timer0;T1- Timer1 (Используется по умолчанию);T2- Timer2.
Если нужно выбрать таймер, то в метод init() передаётся и скорость и название таймера:
void setup(){
pulse.init(9600, T2); // использование таймера 2
}Важно!
Отслеживание значений переменных будет работать только с
T1(Timer1). СT0иT2будет работать только отслеживание значений на пинах.
Метод настраивает подключение через последовательный интерфейс, так что вызывать Serial.begin() повторно нет необходимости.
Метод wait() ставит выполнение скетча на паузу в ожидании команды, передаваемой через последовательный порт. Метод нужно размещать в функции setup().
void setup(){
pulse.init(9600);
...
pulse.wait(); // ожидание команды start
}После вызова метода, скетч приостанавливает работу до поступления команды. Метод ожидает список параметров, которые затем будут использоваться в скетче.
Строка для передачи параметров должна иметь следующий вид:
p<ключ1:значение1|ключ2:значение2|;
Допустим мы хотим передать параметр скорость со значение 30, коэффициент со значением 0.8 и угол со значением 45. Строка для передачи будет выглядеть так:
p<скорость:30|коэффициент:0.8|угол:45|;
Как только скетч получит строку с параметрами, управление перейдёт следующему за методом wait() коду.
Чтобы продолжить работу скетча без отправки параметров достаточно отправить следующую строку:
p<;
После этой команды метод wait() завершит свою работу и передаст управление следующей инструкции. Каждые 100 мс библиотека начнёт отправлять информацию с отслеживаемых пинов и значения отслеживаемых переменных.
Если запуск скетча по команде не требуется, то используйте функцию start():
void setup(){
pulse.init();
...
pulse.start(); // запуск отслеживания параметров
}Контроллер начнёт отправлять отслеживаемые значения сразу же после выполнения этой функции.
Чтобы отправлять значения, полученные с пинов используется следующий метод:
void watchPin(int pin, PinType type, String key);Например, мы хотим следить за значением на аналоговом пине A1. Показания будем отправлять под названием измерение. Также добавим цифровой пин с номером 11 под названием кнопка:
void setup(){
pusle.watchPin(A1, analog, "измерение"); // добавляем аналоговый пин
pulse.watchPin(11, digital, "кнопка"); // добавляем цифровой пин
pulse.wait();
}Второй параметр метода определяет тип отправляемого сигнала:
analog: отправляем значение с аналогового пина - используетсяanalogRead();digital: отправляем значение с цифрового пина - используетсяdigitalRead().
Следить можно и за значениями переменных типа int и float:
void watchVar(int &var, String key);
void watchVar(float &var, String key);Отслеживаемые переменные должны быть объявлены вне функций setup() и loop().
В следующем примере будем следить за двумя переменными - dist и range:
float dist;
int range;
void setup(){
pulse.watchVar(dist, "расстояние");
pulse.watchVar(range, "диапазон");
pulse.wait();
}Каждые 100 мс микроконтроллер будет отправлять отслеживаемые значения, которые добавлены методами watchPin() и watchVar(). Формат строки, которая отправляется микроконтроллером выглядит так:
p>pin:измерение:251|pin:кнопка:0|var:расстояние:23.7|var:диапазон:52|=103
Информация о каждом из значений состоит из трёх частей, разделённых двоеточием: типа - переменная (var) или пин (pin), текста с описанием и числового значения.
Число после = - количество байт в отправляемой строке (включая символ =). С помощью этого числа можно проверить корректность полученных данных.
Переданные в скетч параметры можно получить с помощью следующего метода:
float get(String key, float defaultValue = 0.0);Метод возвращает вещественное число. Первый параметр - ключ. Второй параметр не обязателен и определяет значение по умолчанию, если параметр с таким ключом не был получен.
К примеру, микроконтроллер получил следующий набор параметров:
p<скорость:30|коэффициент:0.8|;
Получить значения этих параметров в скетче можно так:
int speed = pulse.get("скорость"); // в переменной будет значение 30
float coef = pulse.get("коэффициент", 0.5); // в переменной будет значение 0.8
int angle = pulse.get("угол", 90.0); // в переменной будет значение 90, так как этот параметр не отправлялся