Arduino:Примеры/Управление RGB-светодиодом отправкой последовательности цифр

Материал из Онлайн справочника
Версия от 12:41, 8 июля 2023; EducationBot (обсуждение | вклад)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигацииПерейти к поиску

Проверка/Оформление/Редактирование: Мякишев Е.А.



Управление RGB-светодиодом отправкой последовательности цифр

Данный пример демонстрирует управление RGB-светодиодом отправкой последовательности цифр, разделенных символами отличными от цифр(например: "255,55,10", "255.255.255", "0p0p0", "255!255!255").

Для управления RGB-светодиодом мы будем посылать через монитор последовательного порта три 8-битовых значения(т.е. от 0 до 255) разделенных символами отличными от цифр. Для считывания данных мы будем использовать функцию Serial.parseInt(). С её помощью мы сможем прочитать числа игнорируя другие символы, привести их к целочисленному формату для использования в функции analogWrite() и нам не потребуется дополнительных "ухищрений" при работе с одно-, двух- или трехзначными числами.

Наша программа будет осуществлять поиск трех целочисленных значений, пока не обнаружит символ перевода строки "\n". После этого найденные значения будут использоваться для установки цвета RGB-светодиода.

Необходимые компоненты

Монтажная схема

Соберите схему согласно монтажной схеме.

Код

#define RED   11                      // 11 контакт для красного вывода RGB-светодиода
#define GREEN 10                      // 10 контакт для зеленого вывода RGB-светодиода
#define BLUE   9                      // 9 контакт для синего вывода RGB-светодиода

int rval = 0;                         // переменная для хранения значений для красного вывода RGB-светодиода
int gval = 0;                         // переменная для хранения значений для зеленого вывода RGB-светодиода
int bval = 0;                         // переменная для хранения значений для синего вывода RGB-светодиода

void setup()
{
  Serial.begin(9600);                 // Инициализация последовательного соединения на скорости 9600 бод
 
  pinMode(RED, OUTPUT);               // Устанавливаем контакт RED(т.е 11 контакт) как выход 
  pinMode(GREEN, OUTPUT);             // Устанавливаем контакт GREEN(т.е 10 контакт) как выход
  pinMode(BLUE, OUTPUT);              // Устанавливаем контакт BLUE(т.е 9 контакт) как выход
}

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);
    }
  }
}

См.также

Внешние ссылки