/* Usa PCINT3 para contar acionamentos da chave*/
/* Mostra resultados no Monitor Serial */
/* PCINT3 = Pino 50 (PB3) no Arduino Mega */
#define TRUE 1
#define FALSE 0
volatile int cont; //conta acionamentos da chave
volatile int Flag; //avisa que o contador foi alterado
void setup() {
// put your setup code here, to run once:
Serial.begin (9600); // inicialização da serial
/* configura pino 50 (PB30) como entrada com pull-up */
DDRB = DDRB & ~(1 << DDB3); // DDB3 = 0, entrada
PORTB = PORTB | (1 << PB3); // Pull-up ligado (PORTB3 = 1)
/* prepara interrupção PCINT3 */
PCMSK0 = PCMSK0 | (1 << PCINT3); // PCINT3 (pino 50) habilitada
PCICR = PCICR | (1 << PCIE0); // habilita grupo PCINT7:0
}
void loop() {
// put your main code here, to run repeatedly:
Flag = cont = 0; // zera contador e flag
Serial.println("Contador de chave com PCINT3.");
Serial.println(cont);
while (TRUE) {
while (Flag == 0); // espera interrupção por contagem
Flag = 0;
// Adiciona um pequeno delay para garantir que a chave está estável em 0
delay(50);
// Verifica se a chave ainda está pressionada
if (digitalRead(50) == LOW) {
Serial.println(cont); // imprime contador
}
}
}
/* ISR para a interrupção PCINT3 */
ISR (PCINT0_vect) {
cont++;
Flag = 1;
}