Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Примеры/Управление RGB-светодиодом при помощи Arduino

Материал из Онлайн справочника
Перейти к: навигация, поиск

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


Ambox content.png Черновик


Управление RGB-светодиодом при помощи Arduino

Данный пример демонстрирует управление RGB-светодиодом при помощи Arduino.

При каждом нажатии кнопки значение переменной, отвечающей за режим свечения RGB-светодиода будет увеличиваться на 1(инкрементироваться). При достижении значения 8, переменная обнуляется. При этом RGB-светодиод будет светиться разными цветами в зависимости от текущего режима свечения.

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

  • Плата Arduino;
  • RGB-светодиод с общим катодом;
  • Три резистора на 220 Ом;
  • Резистор на 10 кОм;
  • Кнопка;
  • Макетная плата;
  • Провода-перемычки;

Схема

Соберите схему согласно рисунку. Соедините 1, 3 и 4 контакты RGB-светодиода с 11, 10 и 9 цифровыми контактами Arduino через резисторы на 220 Ом, а 2 контакт RGB-светодиода соедините с землей(GND). Соедините 2 цифровой контакт Arduino с одной из ног стягивающего резистора на 10 кОм и одним из контактов кнопки, вторую ногу резистора соедините с землей(GND). Второй контакт кнопки соедините с контактом 5V.

Теперь, допустим, что на кнопку никто не нажимает – в этом случае связи между ногами кнопки не будет, поэтому 2-ой цифровой контакт будет по-прежнему подсоединен к «земле», и Arduino сочтет эту ситуацию как LOW. Теперь, допустим, на кнопку все же кто-то нажимает – это создает связь между обоими ногами, тем самым соединяя 2-ой цифровой и 5-вольтовый контакты, и Arduino сочтет эту ситуацию как HIGH.

Если отсоединить цифровой контакт ото всего, то светодиод примется хаотично мигать. Это значит, что выходное значение будет «плавающим», т.е. беспорядочно переключающимся из LOW в HIGH и наоборот. Именно поэтому в цепи и нужны стягивающие/подтягивающие резисторы.

Arduino uno rgb led.png

Код

  1. #define BLED 9                                         //9 контакт для синего вывода RGB-светодиода
  2. #define GLED 10                                        //10 контакт для зеленого вывода RGB-светодиода
  3. #define RLED 11                                        //11 контакт для красного вывода RGB-светодиода
  4. #define BUTTON 2                                       //2 контакт для кнопки
  5.  
  6. boolean lastButton = LOW;                              //предыдущее состояние кнопки
  7. boolean currentButton = LOW;                           //текущее состояние кнопки
  8. int ledMode = 0;                                       //статус  RGB-светодиода
  9.  
  10. void setup()
  11. {
  12.   pinMode (BLED, OUTPUT);                              //Устанавливаем контакт BLED(Blue LED, т.е 9 контакт) как выход
  13.   pinMode (GLED, OUTPUT);                              //Устанавливаем контакт GLED(Green LED, т.е 9 контакт) как выход
  14.   pinMode (RLED, OUTPUT);                              //Устанавливаем контакт RLED(Red LED, т.е 9 контакт) как выход
  15.   pinMode (BUTTON, INPUT);                             //Устанавливаем контакт BUTTON(т.е. 2 контакт) как вход(опционально)
  16. }
  17.  
  18. void loop()
  19. {
  20.   currentButton = debounce(lastButton);                //считываем состояние кнопки с применением "антидребезга"
  21.   if (lastButton == LOW && currentButton == HIGH)      //если кнопка была нажата
  22.   {
  23.     ledMode++;                                         //инкрементируем значение переменной
  24.   }
  25.   lastButton = currentButton;                          //сохраняем текущее состояние кнопки в предыдущее
  26.  
  27.   if (ledMode == 8) ledMode = 0;                      //если прошли по циклу все режимы свечения светодиода, делаем сброс до 0
  28.   setMode(ledMode);                                   //изменить режим светодиода
  29. }
  30.  
  31. /*
  32. * Функция антидребезга
  33. * принимает предыдущее значение кнопки и возвращает текущее состояние кнопки с подавлением дребезга контактов
  34. */
  35. boolean debounce(boolean last)
  36. {
  37.   boolean current = digitalRead(BUTTON);             //считываем состояние кнопки
  38.   if (last != current)                               //если есть изменения
  39.   {
  40.     delay(5);                                        //ждем 5мс
  41.     current = digitalRead(BUTTON);                   //считываем состояние кнопки
  42.   }
  43.   return current;                                    //возвращаем, считанное состояние кнопки
  44. }
  45.  
  46. /*
  47. * Выбор режима работы светодиода
  48. * Передача номера режима и его установка
  49. * Функция ничего не возвращает
  50. */
  51. void setMode(int mode)
  52. {
  53.   //Красный
  54.   if (mode == 1)
  55.   {
  56.     digitalWrite(RLED, HIGH);
  57.     digitalWrite(GLED, LOW);
  58.     digitalWrite(BLED, LOW);
  59.   }
  60.   //Зеленый
  61.   else if (mode == 2)
  62.   {
  63.     digitalWrite(RLED, LOW);
  64.     digitalWrite(GLED, HIGH);
  65.     digitalWrite(BLED, LOW);
  66.   }
  67.   //Синий
  68.   else if (mode == 3)
  69.   {
  70.     digitalWrite(RLED, LOW);
  71.     digitalWrite(GLED, LOW);
  72.     digitalWrite(BLED, HIGH);
  73.   }
  74.   //Пурпурный(Красный + Синий)
  75.   else if (mode == 4)
  76.   {
  77.     analogWrite(RLED, 127);
  78.     analogWrite(GLED, 0);
  79.     analogWrite(BLED, 127);
  80.   }
  81.   //Бирюзовый(Синий + Зеленый)
  82.   else if (mode == 5)
  83.   {
  84.     analogWrite(RLED, 0);
  85.     analogWrite(GLED, 127);
  86.     analogWrite(BLED, 127);
  87.   }
  88.   //Оранжевый(Зеленый + Красный)
  89.   else if (mode == 6)
  90.   {
  91.     analogWrite(RLED, 127);
  92.     analogWrite(GLED, 127);
  93.     analogWrite(BLED, 0);
  94.   }
  95.   //Белый(Красный + Зеленый + Синий)
  96.   else if (mode == 7)
  97.   {
  98.     analogWrite(RLED, 85);
  99.     analogWrite(GLED, 85);
  100.     analogWrite(BLED, 85);
  101.   }
  102.   //Выключен
  103.   else
  104.   {
  105.     digitalWrite(RLED, LOW);
  106.     digitalWrite(GLED, LOW);
  107.     digitalWrite(BLED, LOW);
  108.   }
  109. }

См.также

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