/* Задание 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; // Флаг состояние диода (горит или нет)
bool flag_flash;
// для текущего момента времени
unsigned long previoustime;
long interval = 5000;
void flashing(int val_red, int val_green, int val_blue)
{
Serial.println(val_red);
Serial.println(val_green);
Serial.println(val_blue);
if (!val_red == HIGH){
Serial.println(val_red);
Serial.println("Краная нажата!");
digitalWrite(LED_R, val_red);
delay(5000);
digitalWrite(LED_R, !val_red);
delay(5000);
return;
}
if (!val_green == HIGH)
{
Serial.println(val_green);
Serial.println("Зеленая нажата!");
digitalWrite(LED_R, !val_green);
digitalWrite(LED_R, val_green);
return;
}
if(!val_blue == HIGH)
{
Serial.println(val_blue);
Serial.println("Синия нажата!");
digitalWrite(LED_R, !val_blue);
digitalWrite(LED_R, val_blue);
return;
}
}
//Настроим GPIO соответсвующим образом
void setup() {
Serial.begin(115200);
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()
{
int val_red = digitalRead(BUTTON_R);
int val_green = digitalRead(BUTTON_G);
int val_blue = digitalRead(BUTTON_B);
unsigned long time = millis();
if (!flag_button_R && !flag_state_R)
{
if (time - previoustime >= interval)
{
previoustime = time;
flashing(val_red, val_green, val_blue);
flag_flash = true;
}
else
{
digitalWrite(LED_R, !val_red);
digitalWrite(LED_G, !val_green);
digitalWrite(LED_B, !val_blue);
}
flag_button_R = true;
flag_state_R = true;
}
else
{
flag_button_R = false;
digitalWrite(LED_R, !val_red);
digitalWrite(LED_G, !val_green);
digitalWrite(LED_B, !val_blue);
// flag_flash = false;
flag_state_R = false;
}
}