#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#define DHTPIN 2 // Define o pino ao qual o sensor está conectado
#define DHTTYPE DHT22 // Define o tipo de sensor DHT (DHT11 neste caso)
#define LEDPIN 13 // Define o pino ao qual o LED está conectado
DHT dht(DHTPIN, DHTTYPE); // Inicializa o sensor DHT
LiquidCrystal_I2C lcd(0x27, 20, 4); // Inicializa o LCD I2C com endereço 0x27, 20 colunas e 4 linhas
void setup() {
Serial.begin(9600); // Inicia a comunicação serial com a velocidade de 9600 bps
dht.begin(); // Inicia o sensor DHT
pinMode(LEDPIN, OUTPUT); // Define o pino do LED como saída
Wire.begin(); // Inicia a comunicação I2C
lcd.begin(20, 4); // Inicializa o LCD
lcd.backlight(); // Liga a luz de fundo do LCD
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.setCursor(0, 1);
lcd.print("Umidade: ");
}
void loop() {
// Lê a temperatura e a umidade do sensor
float temperature = dht.readTemperature(); // Lê a temperatura em Celsius
float humidity = dht.readHumidity(); // Lê a umidade relativa
// Verifica se a leitura do sensor foi bem-sucedida
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Falha ao ler o sensor DHT!");
return;
}
// Exibe os dados no monitor serial
Serial.print("Temperatura: ");
Serial.print(temperature);
Serial.print(" °C\t");
Serial.print("Umidade: ");
Serial.print(humidity);
Serial.println(" %");
// Atualiza o LCD com a temperatura e umidade
lcd.setCursor(6, 0);
lcd.print(temperature);
lcd.print(" C");
lcd.setCursor(9, 1);
lcd.print(humidity);
lcd.print(" %");
// Verifica a temperatura e controla o LED e a mensagem de aviso no LCD
if (temperature > 38) {
lcd.setCursor(0, 2);
lcd.print("ATENCAO: Temp Alta!");
blinkSOS();
} else {
digitalWrite(LEDPIN, LOW); // Apaga o LED
lcd.setCursor(0, 2);
lcd.print(" "); // Limpa a mensagem de aviso
}
// Aguarda alguns segundos antes de realizar a próxima leitura
delay(2000); // Intervalo de leitura de 2 segundos
}
void blinkSOS() {
// Padrão SOS: •••---•••
for (int i = 0; i < 3; i++) { // Três piscadas curtas
digitalWrite(LEDPIN, HIGH);
delay(250); // Curto período ligado (250 ms)
digitalWrite(LEDPIN, LOW);
delay(250); // Curto período desligado (250 ms)
}
for (int i = 0; i < 3; i++) { // Três piscadas longas
digitalWrite(LEDPIN, HIGH);
delay(750); // Longo período ligado (750 ms)
digitalWrite(LEDPIN, LOW);
delay(250); // Curto período desligado (250 ms)
}
for (int i = 0; i < 3; i++) { // Três piscadas curtas
digitalWrite(LEDPIN, HIGH);
delay(250); // Curto período ligado (250 ms)
digitalWrite(LEDPIN, LOW);
delay(250); // Curto período desligado (250 ms)
}
}