#include <Keypad.h>
#include "DHT.h"
#define DHTTYPE DHT22 // Tipo do sensor DHT
#define DHTPin 4 // Pino do DHT22
DHT dht(DHTPin, DHTTYPE);
// Teclado matricial
const byte LINHAS = 4, COLUNAS = 4;
const char TECLAS_MATRIZ[LINHAS][COLUNAS] = {
{'D', '#', '0', '*'},
{'C', '9', '8', '7'},
{'B', '6', '5', '4'},
{'A', '3', '2', '1'}
};
const byte PINOS_LINHAS[LINHAS] = {A2, A3, A4, A5};
const byte PINOS_COLUNAS[COLUNAS] = {3, 2, A0, A1};
Keypad teclado = Keypad(makeKeymap(TECLAS_MATRIZ), PINOS_LINHAS, PINOS_COLUNAS, LINHAS, COLUNAS);
// LEDs
const int LED_VERDE = 10, LED_AZUL = 11, LED_VERMELHO = 12;
// Variáveis de temperatura e histerese
float temperatura = 0.0, umidade = 0.0;
int tempMin = 0, tempMax = 0, histerese = 2;
void setup() {
Serial.begin(115200);
dht.begin();
pinMode(LED_VERDE, OUTPUT);
pinMode(LED_AZUL, OUTPUT);
pinMode(LED_VERMELHO, OUTPUT);
apagarLeds();
}
void loop() {
sensorDHT22();
delay(2000); // Aguardar 2 segundos entre leituras
char tecla = teclado.getKey();
if (tecla) tratarTecla(tecla);
verificarTemperatura();
delay(500); // Pequeno delay para evitar loop muito rápido
}
void sensorDHT22() {
temperatura = dht.readTemperature();
umidade = dht.readHumidity();
if (isnan(temperatura) || isnan(umidade)) {
Serial.println("Falha ao ler do sensor DHT22!");
} else {
Serial.print("Temperatura: ");
Serial.print(temperatura);
Serial.println(" °C");
Serial.print("Umidade: ");
Serial.println(umidade);
}
}
void tratarTecla(char tecla) {
static String buffer = "";
if (tecla >= '0' && tecla <= '9') {
buffer += tecla; // Acumula os números digitados
Serial.print("Número atual: ");
Serial.println(buffer);
}
else if (tecla == 'A') { // Define a temperatura mínima
tempMin = buffer.toInt();
Serial.print("Temperatura Mínima definida: ");
Serial.print(tempMin);
Serial.println(" °C");
buffer = ""; // Limpa o buffer após confirmação
}
else if (tecla == 'B') { // Define a temperatura máxima
tempMax = buffer.toInt();
Serial.print("Temperatura Máxima definida: ");
Serial.print(tempMax);
Serial.println(" °C");
buffer = "";
}
else if (tecla == 'C') { // Define a histerese
histerese = buffer.toInt();
Serial.print("Histerese definida: ");
Serial.println(histerese);
buffer = "";
}
else if (tecla == '*') { // Apaga os LEDs e reseta
apagarLeds();
Serial.println("LEDs apagados.");
}
}
void verificarTemperatura() {
if (temperatura <= tempMin) {
acenderLed(LED_AZUL); // Acende LED azul para temperatura mínima
}
else if (temperatura >= tempMax) {
acenderLed(LED_VERMELHO); // Acende LED vermelho para temperatura máxima
}
else if (temperatura >= tempMin + histerese && temperatura <= tempMax - histerese) {
acenderLed(LED_VERDE); // Acende LED verde para temperatura dentro do intervalo
}
}
void acenderLed(int led) {
apagarLeds(); // Garante que apenas um LED ficará aceso
digitalWrite(led, HIGH);
}
void apagarLeds() {
digitalWrite(LED_VERDE, LOW);
digitalWrite(LED_AZUL, LOW);
digitalWrite(LED_VERMELHO, LOW);
}