int j;
bool bot;
void setup() { // setup só é executado uma única vez (ao ligar o micro)
#define LED 10 // Led vermelho
#define LED 5 // Led azul
#define BOTAO 2 // Botão
Serial.begin(115200); // inicia comunicação serial (BITS por segundos mandado para o micro)
Serial.println("Olá, Mundo! ");
pinMode(LED, OUTPUT); // define o pino 10 como saída
pinMode(LED, OUTPUT); // define o pino 5 como saída
pinMode(BOTAO, INPUT_PULLUP); // define o pino como 1 (lógica invertida)
}
//Loop profissional (problema do delay no acionamento do botão resolvido)
void loop() {
//Atenção para o static nas variáveis abaixo.
//Eles indicam que a função reterá o valor dela entre duas chamadas!
static int i; //variável para contar o número de ciclos
// static int j; //variável para contar o número de apertos de botão
static bool estado; //especifica o estado do LED
static long t_aperto = 0;
static long ti = 0; // váriavel para contar o tempo (tempo inicial)
// long tf = millis(); // váriavel para contar o tempo (tempo final)
static unsigned long repique = millis(); //evita repiques nos apertos do botao
bool bot = digitalRead(BOTAO);
if ((millis() - ti) >= 300) { //caso tenha se passado 500ms, muda o estado do LED
digitalWrite(10, estado);
digitalWrite(5, !estado);
estado = !estado;
ti = millis(); //ajusta ti para recomeçar uma nova contagem!
i++;
Serial.print("Numero de ciclos ");
Serial.println(i);
Serial.print("Botão ");
Serial.println(j);
}
attachInterrupt(digitalPinToInterrupt(BOTAO), Acao_Botao, FALLING); //utilizando a interrupção
}
void Acao_Botao() {
static unsigned long repique = 0;
if ((millis() - repique ) > 300) {
repique = millis();
j++;
}
}