/* Задание 6.2
Управляем свечением диодов кнопками.
При удержании кнопки - горит диод соответсвующего цвета */
#define LED_R 4 // Вывод для Красного диода
#define LED_G 3 // Вывод для Зеленого диода
#define LED_B 2 // Вывод для Синего диода
#define BUTTON_R A0 // Вывод для Красной кнопки
#define BUTTON_G A1 // Вывод для Зеленой кнопки
#define BUTTON_B A2 // Вывод для Синей кнопки
bool flag_button_R; // Флаг состояние кнопки (нажата или нет)
bool flag_state_R; // Флаг состояние диода (горит или нет)
//Настроим GPIO соответсвующим образом
void setup() {
pinMode(LED_R, OUTPUT);
pinMode(LED_G, OUTPUT);
pinMode(LED_B, OUTPUT);
pinMode(BUTTON_R, INPUT_PULLUP);
pinMode(BUTTON_G, INPUT_PULLUP);
pinMode(BUTTON_B, INPUT_PULLUP);
}
// Прочитаем состояние кнопок и запишем их на соответсвующие светодиоды
void loop() {
if (!digitalRead(BUTTON_R) && !flag_button_R) { /*Если кнопка НАЖАТА (сигнал инвертирован, см 6.1)
И флаг состояния кнопки опущен */
flag_button_R = 1; // Поднимем флаг состояния кнопки
flag_state_R = !flag_state_R; // Инфертируем флаг состояния диода
digitalWrite(LED_R, flag_state_R); // Запишем флаг состояния диода на диод
delay(200); // Задержка для учета ребезга контактов
}
if (digitalRead(BUTTON_R) && flag_button_R) { //Если кнопка НЕ НАЖАТА И флаг состояния кнопки поднят
flag_button_R = 0; // Опустим флаг состояния кнопки
}
digitalWrite(LED_G, !digitalRead(BUTTON_G)); //Не забудем инвертировать сигнал!
digitalWrite(LED_B, !digitalRead(BUTTON_B)); //Не забудем инвертировать сигнал!
}