#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 <util/delay.h>
#include <stdlib.h>
#include <avr/interrupt.h>
#include "usart.h"
#include "lcd.h"
#define ar_ligado PG1 // led que indica se o ar condicionado está ligado
#define ligar_desligar_ar PC0
#define recirculacao_sinal PG0
#define recirculacao_led PC1
uint8_t recirculando, anterior_recirc, anterior_ar;
const int ac_max = 30;
const int ac_min = 17;
int ar_condicionado = 25;
uint8_t estado_atual_chave_ar; // o estado da chave: valor da chave sem debounce
uint8_t estado_anterior_chave_ar; // armazena o estado anterior da chave
uint8_t leitura_atual_chave_ar; // a leitura atual do valor da chave
uint8_t leitura_anterior_chave_ar; // a leitura anterior do valor da chave
uint8_t chave_pressionada_ar; // 1 se é reconhecida uma borda de descida
uint8_t estado_atual_chave_recirc; // o estado da chave: valor da chave sem debounce
uint8_t estado_anterior_chave_recirc; // armazena o estado anterior da chave
uint8_t leitura_atual_chave_recirc; // a leitura atual do valor da chave
uint8_t leitura_anterior_chave_recirc; // a leitura anterior do valor da chave
uint8_t chave_pressionada_recirc; // 1 se é reconhecida uma borda de descida
uint8_t ar_atual;
uint8_t ar_anterior;
uint8_t ar_pressionado;
uint8_t re_atual;
uint8_t re_anterior;
uint8_t re_pressionado;
void controla_ar_condicionado(void) {
if(ar_atual == 0x00) { // esperamos um intervalo de tempo maior que o intervalo de repique da chave
PORTG ^= (1 << ar_ligado); // Comuta o LED que indica se o ar condicionado está ligado
}
}
//botão de recirculação
void recirculacao(void) { // esperamos um intervalo de tempo maior que o intervalo de repique da chave
if(((PING & (1 << recirculacao_sinal)) == 0x00)) {
PORTC ^= (1 << recirculacao_led); // Liga o LED de recirculação
}
}
// Configuração do ADC e da USART
void setup(void) {
DDRG &= ~(1 << recirculacao_sinal); // Configura PD3 como entrada
PORTG |= (1 << recirculacao_sinal); // Habilita pull-up em PD3
DDRC |= (1 << recirculacao_led); // Configura o pino do LED de recirculação como saída
PORTC &= ~(1 << recirculacao_led); //led inicialmente desligado
DDRG |= (1 << ar_ligado); // Configura o pino do LED de recirculação como saída
PORTG &= ~(1 << ar_ligado); // led inicialmente desligado
DDRC &= ~(1 << ligar_desligar_ar); // Configura como entrada
PORTC |= (1 << ligar_desligar_ar); // Habilita pull-up
}
int main(void) {
setup();
while (1) {
_delay_ms(20);
ar_anterior=ar_atual;
ar_atual=PINC & (1 << ligar_desligar_ar);
ar_pressionado = ((ar_atual == 0x00) && (ar_anterior == 0x01));
re_anterior=re_atual;
re_atual= PING & (1 << recirculacao_sinal);
re_pressionado = ((re_atual == 0x00) && (re_anterior == 0x0));
recirculacao();
controla_ar_condicionado();
}
return 0;
}