/*
  BOTAO 01 - A qualquer tempo, quando pressionado, reseta tudo
  e inicia um looping da seguinte sequencia no LED:
  "2 pulsos x 3 a cada duas horas"
  repete 3X (acende por 5s, apaga por 2s, acende por 5s, apaga por 4s)
  aguarda 2 horas e repete isso...

  BOTAO 02 - A qualquer tempo, quando pressionado, reseta
  tudo e inicia um looping da seguinte sequencia no LED:
  repete 3X (acende por 5s, apaga por 2s, acende por 5s,
  apaga por 2s, acende por 5s e apaga por 4s)
  aguarda 2 horas e repete isso...

  BOTAO 03 - A qualquer tempo, quando pressionado,
  reseta tudo, acende o LED por 20s e para.
*/
/*
  Ao apertar o botao 01, tem que ligar o led 2 vezes em
  uma sequencia de 3 x a cada duas horas...
  até que outro botão seja acionado...

  botao 01 (pulsado On)
  repete 3X isso:
  Led On 5s
  led Off 2s
  led On 5s
  led Off 4S

  Aguarda duas horas (7200000ms) e repete 3x essa sequencia...Looping infinito, até que algum outro botão seja pulsado (pelo menos é issa solução que eu preciso entregar)
*/
const int button1Pin = 2; // Pino do Botão 1
const int button2Pin = 3; // Pino do Botão 2
const int button3Pin = 4; // Pino do Botão 3
const int ledPin = 13; // Pino do LED

bool isButton1Pressed = false;
bool isButton2Pressed = false;
bool isButton3Pressed = false;

unsigned long contaTempo = 0;
unsigned long doisS = 2000U;
unsigned long quatroS = 4000U;
unsigned long cincoS = 5000U;
unsigned long trintaS = 30000U;
unsigned long duasH = 72000U;

byte flag1 = 0;
byte flag2 = 0;

int count1  = 0;
int count2  = 0;
//------------------------------------------------------------
void setup() {
  Serial.begin(115200);
  pinMode(button1Pin, INPUT_PULLUP); // Configura o botão como entrada com pull-up
  pinMode(button2Pin, INPUT_PULLUP);
  pinMode(button3Pin, INPUT_PULLUP);
  pinMode(ledPin, OUTPUT); // Configura o LED como saída
}
//------------------------------------------------------------
void loop() {
  if (digitalRead(button1Pin) == LOW) {
    delay(50);                                // Debounce
    if (digitalRead(button1Pin) == LOW) {
      contaTempo = millis();
      digitalWrite(ledPin, HIGH);
      flag1 = 1;
      flag2 = 0;
      count2 = 0;
      Serial.println("Entrando bot1");
    }
  }
  if (count1 >= 2)  {
    digitalWrite(ledPin, LOW);
    flag1 = 5;
    if (millis() - contaTempo > duasH) {  // reinicia depois de 2horas
      contaTempo = millis();
      digitalWrite(ledPin, HIGH);
      count1 = 0;
      flag1 = 1;
    }
  }

  if (flag1 == 1) {
    if (millis() - contaTempo > cincoS) {  // Fica acesso 5s e apaga
      contaTempo = millis();
      digitalWrite(ledPin, LOW);
      flag1 = 2;
    }
  }
  if (flag1 == 2) {
    if (millis() - contaTempo > doisS) {  // Fica apagado 2s e acende
      digitalWrite(ledPin, HIGH);
      contaTempo = millis();
      flag1 = 3;
    }
  }
  if (flag1 == 3) {
    if (millis() - contaTempo > cincoS) {  // Fica acesso 5s e apaga
      digitalWrite(ledPin, LOW);
      contaTempo = millis();
      flag1 = 4;
    }
  }
  if (flag1 == 4) {
    if (millis() - contaTempo > quatroS) { // Fica apagado 4s e acende e retorna 2x
      contaTempo = millis();
      digitalWrite(ledPin, HIGH);
      flag1 = 1;
      Serial.print("count1  "); Serial.println(count1);
      count1++;
    }
  }



  if (digitalRead(button2Pin) == LOW) {
    delay(50);                                // Debounce
    if (digitalRead(button2Pin) == LOW) {
      Serial.println("Entrando bot2");
      contaTempo = millis();
      digitalWrite(ledPin, HIGH);
      flag2 = 1;
      flag1 = 0;
      count1 = 0;
    }
  }
  if (count2 >= 3)  {
    digitalWrite(ledPin, LOW);
    flag2 = 5;
    if (millis() - contaTempo > duasH) {  // reinicia depois de 2horas
      contaTempo = millis();
      digitalWrite(ledPin, HIGH);
      count2 = 0;
      flag2 = 1;
    }
  }
  if (flag2 == 1) {
    if (millis() - contaTempo > cincoS) {  // Fica acesso 5s e apaga
      contaTempo = millis();
      digitalWrite(ledPin, LOW);
      flag2 = 2;
    }
  }
  if (flag2 == 2) {
    if (millis() - contaTempo > doisS) {  // Fica apagado 2s e acende
      digitalWrite(ledPin, HIGH);
      contaTempo = millis();
      flag2 = 3;
    }
  }
  if (flag2 == 3) {
    if (millis() - contaTempo > cincoS) {  // Fica acesso 5s e apaga
      digitalWrite(ledPin, LOW);
      contaTempo = millis();
      flag2 = 4;
    }
  } if (flag2 == 4) {
    if (millis() - contaTempo > quatroS) { // Fica apagado 4s e acende e retorna 2x
      contaTempo = millis();
      digitalWrite(ledPin, HIGH);
      flag2 = 1;
      Serial.print("count2  "); Serial.println(count2);
      count2++;
    }
  }

  if (digitalRead(button3Pin) == LOW) {
    delay(30);                                // Debounce
    if (digitalRead(button3Pin) == LOW) {
      Serial.println("Entrando bot3");
      digitalWrite(ledPin, HIGH);
      flag1 = 0;
      flag2 = 0;
      count1 = 0;
      count2 = 0;
      Serial.println("trintaS");
      delay(trintaS);
      digitalWrite(ledPin, LOW);
    }
  }
}