Командная строка для Arduino UNO: быстрое и надежное управление скетчем
Компоненты
- Arduino UNO — 1 шт.
Зачем нужен CLI на Arduino
Часто требуется изменить параметры скетча «на лету»: считать значение датчика, подать команду роботу («поверни налево»), прочитать или установить переменную, настроить цифровой потенциометр. Простейший способ — текстовый интерфейс через последовательный порт.
Архитектура решения
Весь функционал инкапсулирован в заголовочный файл CommandLine.h. Достаточно подключить его в основной скетч:
#include "CommandLine.h"
void setup() {
Serial.begin(115200);
}
void loop() {
if (getCommandLineFromSerialPort(CommandLine)) {
DoMyCommand(CommandLine);
}
}
Возможности интерпретатора
- Команды состоят из имени и аргументов (чисел или слов), разделённых пробелами или запятыми
- Поддержка Backspace при вводе
- Автоматическое приведение к нижнему регистру
- Минимальный расход памяти: используются C-строки, а не
String - Парсинг аргументов через стандартную
strtok()иatoi() - Легкое добавление новых команд через таблицу
if-elseилиswitch-case
Примеры команд
add 5, 10
sub 10, 5
blink 3
setPWM 9, 128
Ключевые функции в CommandLine.h
getCommandLineFromSerialPort()— накапливает символы до '\n', обрабатывает Backspace, возвращаетtrueпри готовой командеreadNumber()— читает следующий числовой аргументreadWord()— читает следующее словоDoMyCommand()— диспетчер команд, вызывает соответствующие функцииaddCommand(),subtractCommand()— примеры пользовательских команд
Интеграция в свой проект
- Создайте новую вкладку в Arduino IDE с именем
CommandLine.h - Скопируйте туда полный код из раздела «Code»
- Добавьте
#include "CommandLine.h"в основной файл - Реализуйте свои команды по аналогии с
addиsub - Загрузите скетч, откройте Serial Monitor (115200 baud) и тестируйте
Советы по расширению
Для большого числа команд удобно использовать хеш-таблицу или массив структур {name, function_ptr}. Аргументы можно собирать в глобальный argv[] уже в DoMyCommand. Макрос print2(label, value) упрощает отладку.
Производственный процесс
- Освоение комментариев в C#: виды, лучшие практики и XML-документация
- Освоение интерфейсов в C#: определение, реализация и практические примеры
- Интерфейсы в Java: концепции, реализация и лучшие практики
- Надежный беспроводной датчик подъездной дороги для длинных подъездов — простое подключение к Raspberry Pi
- Низкокостный ИК-датчик приближенности для Raspberry Pi с использованием только цифровых пинов
- ANDY — многоцелевой гуманоидный робот
- Simple Pi Robot — Сборка 2WD автономного ровера на Raspberry Pi
- Аргументы командной строки в C: argc, argv и практические примеры
- Интерфейсы в C#: контракты для надежного ООП
- Линии продольной резки стальных рулонов: превращение рулонов в точные полосы