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

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

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

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


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


Применение аппаратного прерывания для управления миганием RGB-светодиода

Данный пример демонстрирует применение аппаратного прерывания для управления миганием RGB-светодиода. Здесь реализована схема аппаратного антидребезга контакта кнопки.

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

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

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

Arduino uno SN74LS14N RGB button interrupt 1.png
Схема аппаратного антидребезга контакта кнопки и подключение к Arduino
Распиновка SN74LS14N
Цоколевка SN74LS14N

Код

  1. #define BUTTON_INT 0                          // Прерывание 0 (2-ой цифровой контакт на Arduino Uno)
  2. #define RED        11                         // Красный вывод RGB-светодиода подключен к 11-му цифровому контакту
  3. #define GREEN      10                         // Зеленый вывод RGB-светодиода подключен к 10-му цифровому контакту
  4. #define BLUE       9                          // Синий вывод RGB-светодиода подключен к 9-му цифровому контакту
  5.  
  6. volatile int selectedLED = RED;               // Переменную с модификатором volatile  можно изменять внутри функции-обработчика прерывания
  7.  
  8. void setup()
  9. {
  10.   pinMode (RED, OUTPUT);
  11.   pinMode (GREEN, OUTPUT);
  12.   pinMode (BLUE, OUTPUT);
  13.  
  14.   attachInterrupt(BUTTON_INT, swap, RISING); // Инициализация аппаратного прерывания
  15.                                              // BUTTON_INT: прерывание 0 (2-ой цифровой контакт на Arduino Uno)
  16.                                              // swap      : функция-обработчик прерывания
  17.                                              // RISING    : прерывание срабатывает, когда контакт переключается из LOW в HIGH
  18.                                              // Примечание: заметьте, мы используем RISING(из LOW в HIGH) потому-что мы применяем
  19.                                              // инвертирующий триггер Шмитта SN74LS14N
  20. }
  21.  
  22. void swap()
  23. {
  24.   analogWrite(selectedLED, 0);               // Выключаем текущий цвет
  25.   // Но теперь выбираем другой цвет...
  26.   if (selectedLED == GREEN)
  27.     selectedLED = RED;
  28.   else if (selectedLED == RED)
  29.     selectedLED = BLUE;
  30.   else if (selectedLED == BLUE)
  31.     selectedLED = GREEN;
  32. }
  33.  
  34. void loop()
  35. {
  36.   for (int i = 0; i<256; i++)
  37.   {
  38.     analogWrite(selectedLED, i);
  39.     delay(10);
  40.   }
  41.   for (int i = 255; i>= 0; i--)
  42.   {
  43.     analogWrite(selectedLED, i);
  44.     delay(10);
  45.   }
  46. }

См.также

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