#include "neotimer.h"

Neotimer Delay = Neotimer(1000);
Neotimer Delay_bot = Neotimer(1);
Neotimer Delay_bot1 = Neotimer(10);

int Portas[] = {28,29,30,31,32,40}; //portas com botões
int Bot_in[] = {0,0,0,0,0,0}; //resultado dos botões quando apertados
int Bot_at[] = {0,0,0,0,0,0}; //histórico do ultimo estado em qua o botão esteve
void setup(){
Serial.begin(115200);
for (int Np = 0; Np <= 5; Np++){
  pinMode(Portas[Np], INPUT); //define todas as portas como entrada
}

}

void loop (){
for (int Nb = 0; Nb <= 5; Nb++){
 Bot_in[Nb] = digitalRead(Portas[Nb]); //verifica todas as portas se algum botão foi apertado
}

 /*if (Bot_in[0] == HIGH){
 if (Delay.repeat()){
   Delay.set(1);
  Serial.print(".");
 } else if (Bot_in[0] == HIGH && Bot_at[0] == LOW){
  Serial.print("."); 
  Delay.set(1000);
  }
  Bot_at[0] = Bot_in[0];
} */
 if (Delay_bot1.repeat()){
  if (Bot_in[0] == HIGH && Bot_at[0] == LOW){ //verifica se o botão foi apertado
  Serial.print("."); 
  Delay.repeatReset(); //reseta a contagem de tempo para quando o botão pressionado por muito tempo
  Bot_at[0] = HIGH; //altera o valor de Bot_at[0] para que a função não se repita
  } else if (Bot_in[0] == HIGH){ //verifica se o mesmo botão ainda esta presionado
  
  if (Bot_at[1] == 1 && Delay_bot.repeat()){ //verifica se o botão ficou pressionado por tempo suficiente para repetir ao comandos
  Serial.print("A"); //repete os comandos varias vezes
  } 

  } else { //caso o botão não estiver mais pressionado
   Bot_at[1] = 0; //limpa o valor de Bot_at[1] para que os comandos não se repitam até a próxima vez que o botão for pressionado por muito tempo
  }
   Bot_at[0] = Bot_in[0];

    if (Bot_in[2] == HIGH && Bot_at[2] == LOW){ //verifica se o botão foi apertado
  Serial.print(","); 
  Delay.repeatReset(); //reseta a contagem de tempo para quando o botão pressionado por muito tempo
  Bot_at[2] = HIGH; //altera o valor de Bot_at[0] para que a função não se repita
  } else if (Bot_in[2] == HIGH){ //verifica se o mesmo botão ainda esta presionado
  
  if (Bot_at[3] == 1 && Delay_bot.repeat()){ //verifica se o botão ficou pressionado por tempo suficiente para repetir os comandos
  Serial.print("B"); //repete os comandos varias vezes
  } 

  } else { //caso o botão não estiver mais pressionado
   Bot_at[3] = 0; //limpa o valor de Bot_at[1] para que os comandos não se repitam até a próxima vez que o botão for pressionado por muito tempo
  }
   Bot_at[2] = Bot_in[2];
}
  if (Delay.repeat(1)){ //aguarda o tempo de 1 segundo após o botão ser pressionado
   Bot_at[1] = 1; // guarda o valor 1 para que os comandos se repitam várias vezes até que o botão seja solto
   Bot_at[3] = 1; 
  }
}