int ledA=0;//лампочка - определяемая белой кнопкой
int ledB=0;//лампочка - определяемая синей кнопкой
int ledC=0;//лампочка - определяемая красной кнопкой
//таймеры для кнопок (исключение дребезга с помощью millis())
long past = 0;
long past1 = 0;
long past2 = 0;
long past3 = 0;
//Состояния кнопок
int laststatA=0;//белая
int laststatB=0;//синяя
int laststatC=0;//красная
int period = 500;
int timer = 0;
void setup() {
pinMode(12, INPUT);//вход для белой
pinMode(11, INPUT);//вход для синей
pinMode(10, INPUT);//вход для красной
//для лампочек
pinMode(7, OUTPUT);//выход для белой
pinMode(6, OUTPUT);//выход для синей
pinMode(5, OUTPUT);//выход для красной
pinMode(4, OUTPUT);//выход для фиолетовой
}
void loop() {
if (laststatA==0 & digitalRead(12))//нажали кнопку
{
laststatA = 1;//сменили состояние кнопки
}
long now1 = millis();//использование таймера с периодом 100
if (now1 - past1 >=100)
{
past1 = now1;//сброс таймера
if (laststatA == 1 & !digitalRead(12))//отпустили кнопку
{
laststatA = 0;//сменили состояние кнопки - отпустили
//переключение лампочки в зависимости от ее предыдущего состояния
ledA = ledA + 1;//сменили состояние кнопки
ledB=0;
ledC=0;
digitalWrite(6, LOW);
digitalWrite(5,LOW);
if (ledA == 2){//если она не горит
digitalWrite(7, HIGH);//включаем
}
if (ledA > 2)
{
ledA=0;
digitalWrite(7, LOW);
}
}
}
digitalWrite(6,ledB);
if (laststatB==0 & digitalRead(11))//нажали кнопку
{
laststatB = 1;//сменили состояние кнопки
}
long now2 = millis();//использование таймера с периодом 100
if (now2 - past2 >=100)
{
past2 = now2;//сброс таймера
if (laststatB == 1 & !digitalRead(11))//отпустили кнопку
{
laststatB = 0;//сменили состояние кнопки - отпустили
//переключение лампочки в зависимости от ее предыдущего состояния
if (ledA == 2){
ledB = ledB + 1;//сменили состояние кнопки
if (ledB == 1){//если она не горит
digitalWrite(6, HIGH);//включаем
}
if (ledB > 1)
{
ledA=0;
ledB=0;
ledC=0;
digitalWrite(7,LOW);
digitalWrite(6, LOW);
digitalWrite(5,LOW);
}
}
else
{
ledA=ledB=ledC=0;
digitalWrite(7,LOW);
digitalWrite(6,LOW);
digitalWrite(5,LOW);
}
}
}
if (laststatC==0 & digitalRead(10))//нажали кнопку
{
laststatC = 1;//сменили состояние кнопки
}
long now3 = millis();//использование таймера с периодом 100
if (now3 - past3 >=100)
{
past3 = now3;//сброс таймера
if (laststatC == 1 & !digitalRead(10))//отпустили кнопку
{
laststatC = 0;//сменили состояние кнопки - отпустили
//переключение лампочки в зависимости от ее предыдущего состояния
if (ledA ==2 & ledB == 1){
ledC = ledC + 1;//сменили состояние кнопки
if (ledC == 2)
{
digitalWrite(5, HIGH);//включаем
}
if (ledC > 2)
{
ledA=ledB=ledC=0;
digitalWrite(7,LOW);
digitalWrite(6,LOW);
digitalWrite(5,LOW);
}
}
else
{
ledA=ledB=ledC=0;
digitalWrite(7,ledA);
digitalWrite(6,ledB);
digitalWrite(5,ledC);
}
}
}
if (ledA==2 & ledB==1 & ledC==2)
{
//digitalWrite(4, LOW);
long now = millis();
if (now - timer >= period)
{
timer=now;
digitalWrite(4,HIGH);
}
}
digitalWrite(4, LOW);
}