//---------------------------------------------------------------------------------------------
// Anderson Venzke Backes - Matrícula: 202020893 - Centro de Tecnologia - Engenharia Elétrica
//---------------------------------------------------------------------------------------------
//Bibliotecas:
#define __ATmega2560__
#define __AVR_ATmega2560__
#ifndef F_CPU
#define F_CPU 16000000UL
#endif
#include <stdint.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <stdbool.h>
#include <stdint.h>
#include <util/delay.h>
#include <stdint.h>
#include <stdlib.h>
#include <avr/interrupt.h>
//---------------------------------------------------------------------------------------------
int main(void)
{
//---------------------------------------------------------------------------------------------
// Definição das Variáveis - Definir nome e tipo das variáveis
uint8_t atual;
uint8_t anterior;
uint8_t contador;
//uint8_t estado_atual;
//uint8_t estado_anterior;
//---------------------------------------------------------------------------------------------
//Configuração do sistema - Definir as entradas, saídas e pull-up a nível de registradores
//DDRx: 1-Out, 0-In PORTx: 1-High , 0-Low "Escrever" PINx: "Leitura"
DDRB = DDRB | (1 << DDB0); // Out led
DDRB = DDRB & (~(1 << DDB1)); // In chave
PORTB = PORTB | (1 << PORTB1); //Pull-up na chave
//---------------------------------------------------------------------------------------------
//Configuração inicial das Variáveis
PORTB = PORTB | (1 << PORTB0); // inicia com o led desligado
atual = ((PINB & (1 << PINB1)) == 0x02); // lê o estado da chave
contador = 0;
//---------------------------------------------------------------------------------------------
while (1) // Laço infinito que será executado
{
_delay_ms(25); // periodo a ser esperado para evitar repiques
anterior = atual; // define o anterior da chave como o que havia sido lido nela
atual = ((PINB & (1 << PINB1)) == 0x02); // realiza uma nova leitura da chave
if (((atual == 0x00) && (anterior == 0x01))) //
{
contador = contador + 1;
}
switch (contador) {
case (3):
PORTB = PORTB ^(1 << PORTB0);
contador=0;
break;
default:
break;
}
}
return 0;
}