#define BUTTON_PIN1 25
#define BUTTON_PIN2 26
#define BUTTON_PIN3 27
#define BUTTON_PINR 13
#define LED_PIN1 17
#define LED_PIN2 16
#define LED_PIN3 4
hw_timer_t * timerBlink = NULL;
hw_timer_t * timerPress = NULL;
volatile int contButton1;
volatile int contBlink;
volatile int contPress;
volatile bool But1;
volatile bool B2;
volatile bool B3;
volatile bool ButR;
volatile bool timer_PressOn;
volatile bool Blink;
volatile bool larga;
int state = 0;
void IRAM_ATTR BlinkTimer()
{
Blink = true;
contBlink++;
}
void IRAM_ATTR PressedFor()
{
Serial.println("djashdjashjdhjashdjhaskjd");
timer_PressOn = true;
contPress++;
}
void IRAM_ATTR ISRButton1()
{
if (state == 0)
{
contButton1++;
if (contButton1 == 1)
{
timerStart(timerPress);
}
if (contButton1 == 2)
{
timerStop(timerPress);
}
}
else
{
But1 = true;
}
}
void IRAM_ATTR ISRButton2()
{
B2 = true;
}
void IRAM_ATTR ISRButton3()
{
B3 = true;
}
void IRAM_ATTR ISRButtonR()
{
ButR = true;
}
void setup()
{
Serial.begin(115200);
pinMode(BUTTON_PIN1, INPUT_PULLUP);
pinMode(BUTTON_PIN2, INPUT_PULLUP);
pinMode(BUTTON_PIN3, INPUT_PULLUP);
pinMode(BUTTON_PINR, INPUT_PULLUP);
pinMode(LED_PIN1, OUTPUT);
pinMode(LED_PIN2, OUTPUT);
pinMode(LED_PIN3, OUTPUT);
attachInterrupt(digitalPinToInterrupt(BUTTON_PIN1), ISRButton1, CHANGE);
attachInterrupt(digitalPinToInterrupt(BUTTON_PIN2), ISRButton2, FALLING);
attachInterrupt(digitalPinToInterrupt(BUTTON_PIN3), ISRButton3, FALLING);
attachInterrupt(digitalPinToInterrupt(BUTTON_PINR), ISRButtonR, FALLING);
timerBlink = timerBegin(1000000);
timerAttachInterrupt (timerBlink, &BlinkTimer);
timerAlarm(timerBlink, 250000, true, 0);
timerStop(timerBlink);
timerPress = timerBegin(1000000);
timerAttachInterrupt (timerPress, &PressedFor);
timerAlarm(timerPress, 250000, true, 0);
timerStop(timerPress);
state = 0;
contButton1 = 0;
contPress = 0;
contBlink = 0;
Blink = false;
timer_PressOn = false;
}
void loop()
{
if ((contButton1 == 2 ) && (contPress <= 4))
{
But1 = true;
contButton1 = 0;
contPress = 0;
Serial.println("NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN");
}
else if ((contButton1 == 2 ) && (contPress >= 4))
{
But1 = true;
larga = true;
contButton1 = 0;
contPress = 0;
Serial.println("YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY");
}
switch (state)
{
case 0:
Serial.println ("0");
if (But1) {
if (larga)
{
timerStart(timerBlink);
if (Blink)
{
if (contBlink < 6)
{
Serial.println(contBlink);
digitalWrite(LED_PIN1, !digitalRead(LED_PIN1));
Blink = false;
}
if (contBlink == 6)
{
contBlink = 0;
timerStop(timerBlink);
//digitalWrite(LED_PIN1, !digitalRead(LED_PIN1));
Blink = false;
larga = false;
But1 = false;
state = 1;
}
}
}
else
{
timerStart(timerBlink);
if (Blink)
{
if (contBlink < 6)
{
digitalWrite(LED_PIN1, !digitalRead(LED_PIN1));
Blink = false;
}
if (contBlink == 6)
{
contBlink = 0;
timerStop(timerBlink);
digitalWrite(LED_PIN1, !digitalRead(LED_PIN1));
Blink = false;
state = 0;
But1 = false;
}
}
}
}
if (B2)
{
timerStart(timerBlink);
if (Blink)
{
if (contBlink < 6)
{
digitalWrite(LED_PIN1, !digitalRead(LED_PIN1));
Blink = false;
}
if (contBlink == 6)
{
contBlink = 0;
timerStop(timerBlink);
digitalWrite(LED_PIN1, !digitalRead(LED_PIN1));
Blink = false;
state = 0;
B2 = false;
}
}
}
if (B3)
{
timerStart(timerBlink);
if (Blink)
{
if (contBlink < 6)
{
digitalWrite(LED_PIN1, !digitalRead(LED_PIN1));
Blink = false;
}
if (contBlink == 6)
{
contBlink = 0;
timerStop(timerBlink);
digitalWrite(LED_PIN1, !digitalRead(LED_PIN1));
Blink = false;
state = 0;
B3 = false;
}
}
}
if (ButR)
{
state = 0;
ButR = false;
}
break;
case 1:
Serial.println ("1");
if (But1)
{
timerStart(timerBlink);
if (Blink)
{
if (contBlink < 6)
{
digitalWrite(LED_PIN2, !digitalRead(LED_PIN2));
Blink = false;
}
if (contBlink == 6)
{
contBlink = 0;
timerStop(timerBlink);
Blink = false;
But1 = false;
digitalWrite(LED_PIN1, false);
digitalWrite(LED_PIN2, false);
state = 0;
But1 = false;
}
}
}
if (B2)
{
timerStart(timerBlink);
if (Blink)
{
if (contBlink < 6)
{
digitalWrite(LED_PIN2, !digitalRead(LED_PIN2));
Blink = false;
}
if (contBlink == 6)
{
contBlink = 0;
timerStop(timerBlink);
//digitalWrite(LED_PIN2, !digitalRead(LED_PIN2));
Blink = false;
state = 2;
B2 = false;
}
}
}
if (B3)
{
timerStart(timerBlink);
if (Blink)
{
if (contBlink < 6)
{
digitalWrite(LED_PIN2, !digitalRead(LED_PIN2));
Blink = false;
}
if (contBlink == 6)
{
contBlink = 0;
timerStop(timerBlink);
Blink = false;
But1 = false;
digitalWrite(LED_PIN1, false);
digitalWrite(LED_PIN2, false);
state = 0;
B3 = false;
}
}
}
if (ButR)
{
digitalWrite(LED_PIN1, false);
digitalWrite(LED_PIN2, false);
state = 0;
ButR = false;
}
break;
case 2:
Serial.println ("2");
if (But1)
{
timerStart(timerBlink);
if (Blink)
{
if (contBlink < 6)
{
digitalWrite(LED_PIN3, !digitalRead(LED_PIN3));
Blink = false;
}
if (contBlink == 6)
{
contBlink = 0;
timerStop(timerBlink);
Blink = false;
But1 = false;
digitalWrite(LED_PIN1, false);
digitalWrite(LED_PIN2, false);
digitalWrite(LED_PIN3, false);
state = 0;
But1 = false;
}
}
}
if (B2)
{
timerStart(timerBlink);
if (Blink)
{
if (contBlink < 6)
{
digitalWrite(LED_PIN3, !digitalRead(LED_PIN3));
}
if (contBlink == 6)
{
contBlink = 0;
timerStop(timerBlink);
Blink = false;
But1 = false;
digitalWrite(LED_PIN1, false);
digitalWrite(LED_PIN2, false);
digitalWrite(LED_PIN3, false);
state = 0;
B2 = false;
}
}
}
if (B3)
{
timerStart(timerBlink);
if (Blink)
{
if (contBlink < 6)
{
digitalWrite(LED_PIN3, !digitalRead(LED_PIN3));
Blink = false;
}
if (contBlink == 6)
{
contBlink = 0;
timerStop(timerBlink);
//digitalWrite(LED_PIN2, !digitalRead(LED_PIN2));
Blink = false;
state = 3;
B3 = false;
}
}
}
if (ButR)
{
digitalWrite(LED_PIN1, false);
digitalWrite(LED_PIN2, false);
digitalWrite(LED_PIN3, false);
state = 0;
ButR = false;
}
break;
case 3:
Serial.println ("3");
if (ButR)
{
timerStop(timerBlink);
contBlink = 0;
Blink = false;
digitalWrite(LED_PIN1, false);
digitalWrite(LED_PIN2, false);
digitalWrite(LED_PIN3, false);
state = 0;
ButR = false;
}
else
{
But1 = false;
B2 = false;
B3 = false;
timerStart(timerBlink);
if (Blink)
{
digitalWrite(LED_PIN3, !digitalRead(LED_PIN3));
}
}
break;
}
delay(10);
}