/* Задание 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 // Вывод для Синей кнопки
// для текущего момента времени
unsigned long previoustime;
long interval = 1000;
long interval_long = 5000;
unsigned long time_pr;
int val_red_pr = 1;
int val_green_pr = 1;
int val_blue_pr = 1;
//Настроим 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);
if (((val_red != val_red_pr) && (!val_red)) || ((val_blue != val_blue_pr) && (!val_blue))
|| ((val_green != val_green_pr) && (!val_green))) {time_pr = millis();};
val_red_pr = val_red;
val_green_pr = val_green;
val_blue_pr = val_blue;
if (millis() - time_pr <= interval_long)
{
// straight_light(val_red, val_green, val_blue);
if(!val_red) {digitalWrite(LED_R, HIGH);} else {digitalWrite(LED_R, LOW);}
if(!val_green) {digitalWrite(LED_G, HIGH);} else {digitalWrite(LED_G, LOW);}
if(!val_blue) {digitalWrite(LED_B, HIGH);} else {digitalWrite(LED_B, LOW);}
}
else {
unsigned long time = millis();
if (time - previoustime >= interval)
{
previoustime = time;
if(!val_red) {digitalWrite(LED_R, !digitalRead(LED_R));}
if(!val_blue) {digitalWrite(LED_B, !digitalRead(LED_B));}
if(!val_green) {digitalWrite(LED_G, !digitalRead(LED_G));}
}
}
}