Отправка последовательности цифр для управления RGB-светодиодом
Отправка одного управляющего символа позволяет управлять единственным цифровым контактом, но что делать, если требуются более сложные алгоритмы управления? В этом разделе мы рассмотрим передачу нескольких групп цифр, разделеых запятой, для управления множеством устройств. Чтобы разобраться в этой задаче, соберем схему подключения RGB-светодиода с общим катодом, как показано на рис. 6.11.
Для управления RGB-светодиодом мы посылаем три отдельные 8-битовые значения (0-255), чтобы задать яркость каждого цвета. Например, чтобы установить максимальную яркость всех цветов, нужно послать "255,255,255". Перечислим проблемы, возникающие при реализации данной задачи:
- 134 -
• необходимо различать цифры и запятые;
• последовательность символов нужно привести к целочисленному формату, чтобы использовать функцию analogWrite();
• числовое значение может состоять из одной, двух или трех цифр.
К счастью, в Arduino IDE есть очень удобная функция для анализа последовательности цифр - Serial. parseInt(). При каждом вызове этой функции она ожидает прихода в буфер последовательности цифр и затем преобразует ее в целое число.
Обнаружив символ запятой, функция считывает первое и второе значения, третье значение будет считано, когда поступит символ перевода строки.
Чтобы посмотреть, как действует эта функция, загрузите программу листинга 6.5
на плату Arduino.
Рис. 6.11. Подключение RGB-светодиода к Arduino
- 135 -
Листинг 6.5. Последовательное управление RGB-светодиодом - list_control.ino
// Отправка многосимвольных значений
// Константы выводов RGB-светодиода
const int RED =11;
const int GREEN =10;
const int BLUE =9;
// Переменные значений выводов RGB
int rval = 0;
int gval = 0;
int bval = 0;
void setup()
{
Serial.begin(9600); // Инициализация последовательного порта
// на скорости 9600
// Установить контакты на выход OUT
pinMode(RED, OUTPUT);
pinMode(GREEN, OUTPUT);
pinMode(BLUE, OUTPUT);
}
void loop()
{
// Пока в буфере есть данные
while (Serial.available() > 0)
{
rval = Serial.parseInt(); // Первое ЧИСЛО
gval = Serial.parseInt(); // Второе число
bval = Serial.parseInt(); // Третье число
if (Serial. read() == '\n') // Конец передачи
{
// Установка яркости светодиода
analogWrite(RED, rval);
analogWrite(GREEN, gval);
analogWrite(BLUE, bval);
}
}
}
Программа осуществляет поиск трех целочисленных значений, пока не обнаружит символ перевода строки (\n). Как только это произойдет, полученные значения переменных используются для установки яркости светодиодов. Откройте монитор последовательного порта и введите три значения от 0 до 255, разделенные запятой, например "200,30, 180". Попробуйте получить различные цвета, вводя разные цифры.
- 136 -
6.7. Создаем компьютерное приложение
В конце концов, вам надоест "общение" с платой Arduino через монитор последовательного порта Arduino IDE. Гораздо удобнее работать с приложением, написанным на каком-либо языке программирования, имеющем библиотеки для обмена по последовательному порту. Вы можете использовать ваш любимый язык программирования для написания программы, которая посылает последовательные команды к плате Arduino и получает данные, передаваемые от Arduino к компьютеру.
В этой книге выбран язык программирования Processing, потому что он очень похож на язык Arduino, с которым вы уже знакомы. На самом деле, язык программирования Arduino основан на Processing! Другие популярные языки программирования, для которых существуют обширные библиотеки для работы с последовательным портом, - Python, РНР, Visual Basic, С и т. п. Сначала выясним, как читать передаваемые последовательные данные в Processing, а затем узнаем, как с его помощью создать простой графический интерфейс пользователя (GUI) для отправки команд на плату Arduino.
6.7.1. Интерфейс Processing
Интерфейс программирования на Processing достаточно прост и он похож на тот, с которым вы уже знакомы при программировании Arduino. В этом разделе вы установите Processing, а затем напишете простой графический интерфейс для отображения данных, передаваемых с платы Arduino через последовательный порт.
После этого вы реализуете связь в обратном направлении, чтобы управлять платой Arduino из приложения, установленного на вашем компьютере.
6.7.2. Установка Processing
Сначала необходимо установить Processing на вашей машине. Делается это так же, как и в главе 1, когда устанавливали Arduino IDE. Зайдите на страницу
Читать дальше