#include <avr/io.h>
#include <util/delay.h>
#define CH_PIN PB1 //52
#define LED_PIN PB0 //53
void configura_io(void)
{
DDRB = DDRB & ~(1 << CH_PIN); // Configura PB1 como entrada (chave)
DDRB = DDRB | (1 << LED_PIN); // Configura PB0 como saída (LED)
PORTB = PORTB | (1 << CH_PIN); // Habilita o resistor de pull-up na chave
}
int main(void)
{
configura_io();
uint8_t chave_estado_anterior = 0;
uint8_t chave_pulsos = 0;
while (1)
{
// Lê o estado atual da chave
uint8_t chave_estado = (PINB & (1 << CH_PIN)) >> CH_PIN;
// Verifica se a chave foi pressionada (borda de descida)
if (chave_estado == 0 && chave_estado_anterior == 1)
{
chave_pulsos++; // Incrementa o contador de pulsos da chave
// Verifica se ocorreram três pulsos
if (chave_pulsos == 3)
{
// Alterna o estado do LED
PORTB = PORTB ^ (1 << LED_PIN);
chave_pulsos = 0; // Reinicia o contador de pulsos
}
}
chave_estado_anterior = chave_estado; // Atualiza o estado anterior da chave
_delay_ms(20); // Pequena pausa para evitar detecção de múltiplas bordas
}
return 0;
}