#include <DHT.h> // biblioteca do sensor DHT11
// ----- Configuração do DHT11 -----
#define DHTPIN 2 // onde o sensor esta ligado
#define DHTTYPE DHT11 // modelo do sensor é DHT11
// ----- LEDs -----
#define LED_VERDE 8 // esta ligado no pino 8
#define LED_AMARELO 9 // esta ligado no pino 9
#define LED_VERMELHO 10 // esta ligado no pino 10
DHT dht(DHTPIN, DHTTYPE); // criando o sensor para usar depois
// Tempos de pisca (ms)
const unsigned long PISCA_LENTO = 800; // quanto tempo o LED amarelo liga e desliga
const unsigned long PISCA_RAPIDO = 200; // quanto tempo o LED vermelho liga e desliga
// Memoria do arduino
unsigned long tempoAnterior = 0; // lembra quando piscou da ultima vez
bool estadoPisca = false; // lembra se o led esta ligado ou desligado
float temperatura = 0; // guarda a temperatura atual
// --- Função de teste inicial ---
void testeInicial() { // essa parte acende os LEDs um por um e depois todos juntos para verificar se o sistema iniciou e se os LEDs estão funcionando
// Verde
digitalWrite(LED_VERDE, HIGH);
delay(300);
digitalWrite(LED_VERDE, LOW);
delay(300);
// Verde + Amarelo
digitalWrite(LED_VERDE, HIGH);
digitalWrite(LED_AMARELO, HIGH);
delay(300);
digitalWrite(LED_VERDE, LOW);
digitalWrite(LED_AMARELO, LOW);
delay(300);
// Verde + Amarelo + Vermelho
digitalWrite(LED_VERDE, HIGH);
digitalWrite(LED_AMARELO, HIGH);
digitalWrite(LED_VERMELHO, HIGH);
delay(300);
digitalWrite(LED_VERDE, LOW);
digitalWrite(LED_AMARELO, LOW);
digitalWrite(LED_VERMELHO, LOW);
delay(300);
}
// --- Setup ---
void setup() { // roda uma unica vez quando o arduino liga
Serial.begin(9600); // permite mostrar mensagens no computador
dht.begin(); // liga o sensor de temperatura
pinMode(LED_VERDE, OUTPUT); // esses pinos vao mandar energia para os LEDs
pinMode(LED_AMARELO, OUTPUT);
pinMode(LED_VERMELHO, OUTPUT);
digitalWrite(LED_VERDE, LOW);
digitalWrite(LED_AMARELO, LOW);
digitalWrite(LED_VERMELHO, LOW);
testeInicial(); // Executa o teste inicial dos LEDs
}
// --- Loop principal ---
void loop() { // o coraçao, roda sem parar
unsigned long agora = millis(); // pega o tempo atual
static unsigned long ultimaLeitura = 0; // isso serve para o Arduino não esquecer quando foi a última vez que ele leu o sensor
if (agora - ultimaLeitura >= 2000) { // leitura do DHT11 a cada 2 segundos
ultimaLeitura = agora; // atualiza o horário da leitura
float leitura = dht.readTemperature(); // lendo a temperatura
if (!isnan(leitura)) { // conferindo se a leitura deu certo
temperatura = leitura; // guarda a temperatura numa variavel
Serial.print("Temperatura: "); // mostra a temperatura no computador e ajuda a testar
Serial.print(temperatura);
Serial.println(" °C");
} else { // se a temperatura falhar ele avisa
Serial.println("Erro ao ler o DHT11");
}
}
// Apaga todos os LEDs antes de definir o estado
digitalWrite(LED_VERDE, LOW);
digitalWrite(LED_AMARELO, LOW);
digitalWrite(LED_VERMELHO, LOW);
// ----- Controle dos LEDs -----
if (temperatura <= 2 && temperatura > 0) { // se a temperatura for maior que 0 e menor ou igual a 2 o LED verde acende
// Verde contínuo
digitalWrite(LED_VERDE, HIGH);
}
else if (temperatura <= 3 && temperatura > 0) { // se a temperatura estiver alta ou ate 3 graus o LED amarelo pisca devagar
// Amarelo piscando devagar
if (agora - tempoAnterior >= PISCA_LENTO) {
tempoAnterior = agora;
estadoPisca = !estadoPisca;
digitalWrite(LED_AMARELO, estadoPisca);
}
}
else { // se não for nem verde e nem amarelo O LED vermelho pisca rápido
// Vermelho piscando rápido
if (agora - tempoAnterior >= PISCA_RAPIDO) {
tempoAnterior = agora;
estadoPisca = !estadoPisca;
digitalWrite(LED_VERMELHO, estadoPisca);
}
}
}