#include <avr/io.h>
#include <util/delay.h>
//#include "dht22.h"
// Definições do LCD
#define LCD_DADOS PORTA // Porta A para dados
#define LCD_CONTROLE PORTH // Porta H para controle
#define RS PH5 // Pino 8 do Arduino Mega
#define E PH3 // Pino 6 do Arduino Mega
#define D4 PA4 // Pino 26 do Arduino Mega
#define D5 PA5 // Pino 27 do Arduino Mega
#define D6 PA6 // Pino 28 do Arduino Mega
#define D7 PA7 // Pino 29 do Arduino Mega
// Definições do Sensor DHT22
#define DHT22_PIN PH6 // Pino 9 do Arduino Mega
// Protótipos de função
void init_LCD();
void LCD_command(unsigned char command);
void LCD_dados(unsigned char data);
void LCD_string(char *str);
void LCD_clear();
void read_DHT22(uint8_t *temp_int, uint8_t *temp_dec);
int main()
{
// Configura os pinos do LCD como saída
DDRA = 0xFF;
DDRH |= (1 << RS) | (1 << E) | (1 << D4) | (1 << D5) | (1 << D6) | (1 << D7);
// Inicializa o LCD
init_LCD();
// Loop principal
while (1)
{
uint8_t temp_int, temp_dec;
read_DHT22(&temp_int, &temp_dec);
// Exibe a temperatura no LCD
LCD_clear();
char temp_str[16];
sprintf(temp_str, "Temp: %d.%d C", temp_int, temp_dec);
LCD_string(temp_str);
// Aguarda um pouco antes de fazer a próxima leitura
_delay_ms(2000);
}
return 0;
}
void init_LCD()
{
_delay_ms(50);
LCD_command(0b00110000);
_delay_ms(5);
LCD_command(0b00110000);
_delay_us(100);
LCD_command(0b00110000);
_delay_us(100);
LCD_command(0b00111000);
_delay_us(100);
LCD_command(0b00001100);
_delay_us(100);
LCD_command(0b00000001);
_delay_ms(2);
LCD_command(0b00000110);
_delay_us(100);
}
void LCD_command(unsigned char command)
{
LCD_CONTROLE &= ~(1 << RS); // RS = 0 para comando
LCD_DADOS = command;
LCD_CONTROLE |= (1 << E); // Pulso de habilitação
_delay_us(1);
LCD_CONTROLE &= ~(1 << E);
_delay_us(100);
}
void LCD_dados(unsigned char data)
{
LCD_CONTROLE |= (1 << RS); // RS = 1 para dados
LCD_DADOS = data;
LCD_CONTROLE |= (1 << E); // Pulso de habilitação
_delay_us(1);
LCD_CONTROLE &= ~(1 << E);
_delay_us(100);
}
void LCD_string(char *str)
{
while (*str != '\0')
{
LCD_dados(*str);
str++;
}
}
void LCD_clear()
{
LCD_command(0b00000001);
_delay_ms(2);
}
void read_DHT22(uint8_t *temp_int, uint8_t *temp_dec)
{
// Implementação da leitura do sensor DHT22
// Simulação de valores para testes
*temp_int = 25;
*temp_dec = 5;
}