Arduino-библиотека для управления ROBBO Платформой
Некоторое время назад появилась возможность опробовать оборудование Robbo - Лабораторию и Платформу. Для программирования этих устройств используется модифицированная версия Scratch под название RobboScratch.
Само оборудование создано на основе платформы Arduino, поэтому поддерживается разработка на языке C++. Хотелось лучше понять как работает Платформа и, за одно, разобраться в разработке для Arduino, поэтому было решено написать собственную библиотеку для управления Robbo Платформой.
Функции в библиотеке максимально близко повторяют функции блоков в визуализированной среде RobboScratch, чтобы ускорить переход от одного языка к другому.
Вот пример программы для движения платформы по линии:
/*
Простейший алгоритм следования по линии.
Датчик линии подключён к первому слоту.
*/
#include <RPlatform.h>
// среднее значение между минимальным и максимальным показаниями датчика линии
#define BORDER 37
RPlatform robot; // создаём объект класса RPlatform
void setup()
{
/*
В условии цикла проверяем, нажата ли кнопка Start.
Основная часть программы запуститься с паузой в 3 секунды
только после нажатия на кнопку.
*/
while (!robot.isStartPressed())
{
}
delay(3000);
robot.run(); // запускаем моторы
}
int lineSensor;
void loop()
{
if (robot.readSensor(1) > BORDER)
{
robot.setPower(3, 20);
}
else
{
robot.setPower(20, 3);
}
}
Исходный код библиотеки и документацию можно найти по ссылке на Github-репозиторий. Там же есть инструкция по установке библиотеки.
Теперь некоторые технические детали с которыми нужно было разобраться.
Требования к библиотеке
Недостаточно написать C++ код. В папке с библиотекой должны быть дополнительные файлы с информацией о версии, названием и описанием библиотеки. Все требования подробно описаны на странице документации Arduino CLI.
Руководств по разработке библиотек для Arduino довольно много. Я часто обращался к статье на сайте AlexGyver.
Публикация библиотеки
Чтобы библиотека была доступна в Менеджере библиотек Arduino IDE, нужно добавить ссылку на репозиторий с библиотекой в список, который находится в официальном репозитории Arduino под названием library-registry. Но перед публикацией библиотеку нужно проверить с помощью утилиты Arduino Lint.
Линтер - это программа, которая ищет проблемы в коде до его запуска. Например неправильные названия переменных, лишние отступы в коде и так далее.
В целом, Arduino-Lint - полезная программа, так как с её помощью можно проверить качество кода. Библиотеку не получится официально опубликовать, пока утилита будет сообщать о проблемах в оформлении.
Новое из Arduino
До работы над библиотекой не доводилось использовать прерывания. В случае с Платформой, прерывания используются для подсчёта оборотов, сделанных моторами робота1. На одном моменте застрял надолго. Оказалось, что переменная, которая меняется при срабатывании прерывания нужно объявлять с модификатором volatile
. Например:
Это служебное слово указывает компилятору брать значение переменной напрямую из RAM. В таком случае значение всегда будет актуальным.
В заключение
В планах разработать библиотеку для управления устройствами из набора расширений: захватом на сервоприводе, ультразвуковым датчиком расстояния и датчиком цвета.
Также были мысли разработать похожу библиотеку для Robbo Лаборатории, но думаю в этом пока нет необходимости.
В любом случае было любопытно заниматься разработкой библиотеки. Одна задача тянула за собой другую и такое погружение помогло лучше разобраться в устройстве Платформы.
Надеюсь библиотека будет полезна и другим людям.