//Definição de saídas para os LEDs
int LED[3] = {4,0,2};
//Definição de entrada do botão(pino 14)
int botSet = 12;
int botReset = 14;
//Definição das cores dos LEDs
//verde color[0][k]
//amarelo color[1][k]
//vermelho color[2][k]
//Desligado color[3][k]
int color[4][3] = {{0,255,0},{255,255,0},{255,0,0},{0,0,0}};
void setup() {
// put your setup code here, to run once:
//Definição de entradas e saídas
for(int j =0;j<=2;j++)pinMode(LED[j], OUTPUT);
pinMode(botSet, INPUT);
pinMode(botReset, INPUT);
}
void loop() {
// put your main code here, to run repeatedly:
int ref = millis();
bool flag = false;
// Parâmetros do debounce:
const int timeBounce = 10; //O bounce depende do tempo de estabilização. Assim, aqui presumi-se que depois de 10 ms as leituras estão estáveis.
int bounce = 0;
int descarte;
bool verificado = false;
bool botao = false;
//Loop principal, infinito:
do{
//Verificação de se o botão foi pressionado
if((!digitalRead(botSet) == 1 || !digitalRead(botReset) == 1) && verificado == false){
verificado = true;
bounce = millis();
}
//Comandos com a aplicação de debounce
if(millis() - bounce > timeBounce && verificado == true){
if(!digitalRead(botSet) == 1 && flag == false){
botao = true; // Variável de suporte para executar o código inpendentemente se o botão foi desetivado depois da verificação de "if" acima. Ela substitui a partir daqui o !digitalRead(botSet).
//Início
flag = true;
for(int k = 0;k<=2;k++)digitalWrite(LED[k], color[0][k]);
//Fim
botao = false;
while(!digitalRead(botSet) == 1){
} // Prende a execução até que o botão pare de ser apertado. Assim, o código nao corre o risco de considerar duas vezes o mesmo pressionamento do botão.
bounce = 0;
verificado = false;
}
if(!digitalRead(botReset) == 1 && flag == true){
botao = true; // Variável de suporte para executar o código inpendentemente se o botão foi desetivado depois da verificação de "if" acima. Ela substitui a partir daqui o !digitalRead(botReset).
//Início
flag = false;
for(int k = 0;k<=2;k++)digitalWrite(LED[k], color[3][k]);
//Fim
botao = false;
while(!digitalRead(botSet) == 1){
} // Prende a execução até que o botão pare de ser apertado. Assim, o código nao corre o risco de considerar duas vezes o mesmo pressionamento do botão.
bounce = 0;
verificado = false;
}
}
}while(1 == 1);
}