#include <DHT.h>
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// LEDs
const int ledTemp = 4; // LED vermelho
const int ledUmid = 3; // LED azul
// Botões
const int botaoModo = 7; // alterna entre modo temperatura/umidade
const int botaoSalvar = 9; // salva o setpoint
// Potenciômetro
const int potPin = A0;
// Variáveis de controle
int modo = 0;
float setTemp = 25.0;
float setUmid = 50.0;
bool lastBotaoModo = HIGH;
bool lastBotaoSalvar = HIGH;
void setup() {
Serial.begin(9600);
dht.begin();
pinMode(ledTemp, OUTPUT);
pinMode(ledUmid, OUTPUT);
pinMode(botaoModo, INPUT_PULLUP);
pinMode(botaoSalvar, INPUT_PULLUP);
Serial.println("=== Estacao Meteorologica Interativa ===");
}
void loop() {
// Leitura do sensor
float temperatura = dht.readTemperature();
float umidade = dht.readHumidity();
// Leitura dos botões (detecção de borda de descida)
bool estadoBotaoModo = digitalRead(botaoModo);
bool estadoBotaoSalvar = digitalRead(botaoSalvar);
// Alternar modo ao pressionar botaoModo
if (lastBotaoModo == HIGH && estadoBotaoModo == LOW) {
modo = !modo;
if (modo == 0) Serial.println("Modo ativo: AJUSTE DE TEMPERATURA");
else Serial.println("Modo ativo: AJUSTE DE UMIDADE");
delay(200); // debounce
}
lastBotaoModo = estadoBotaoModo;
// Potenciômetro
int leituraPot = analogRead(potPin);
float valorPot;
if (modo == 0) {
valorPot = map(leituraPot, 0, 1023, 15, 35); // faixa temp
Serial.print("Ajuste de Temperatura (pot): ");
Serial.println(valorPot);
} else {
valorPot = map(leituraPot, 0, 1023, 20, 80); // faixa umidade
Serial.print("Ajuste de Umidade (pot): ");
Serial.println(valorPot);
}
// Salvar setpoint ao pressionar botaoSalvar
if (lastBotaoSalvar == HIGH && estadoBotaoSalvar == LOW) {
if (modo == 0) {
setTemp = valorPot;
Serial.print("Novo set point de TEMPERATURA salvo: ");
Serial.println(setTemp);
} else {
setUmid = valorPot;
Serial.print("Novo set point de UMIDADE salvo: ");
Serial.println(setUmid);
}
delay(200);
}
lastBotaoSalvar = estadoBotaoSalvar;
// Exibir valores atuais
Serial.print("Temperatura atual: ");
Serial.print(temperatura);
Serial.print(" °C | Umidade atual: ");
Serial.print(umidade);
Serial.println(" %");
Serial.print("SetPoint Temperatura: ");
Serial.print(setTemp);
Serial.print(" °C | SetPoint Umidade: ");
Serial.print(setUmid);
Serial.println(" %");
// Alarmes
if (temperatura > setTemp) {
digitalWrite(ledTemp, HIGH);
Serial.println("ALARME! TEMPERATURA ALTA!");
} else {
digitalWrite(ledTemp, LOW);
}
if (umidade < setUmid) {
digitalWrite(ledUmid, HIGH);
Serial.println("ALARME! UMIDADE BAIXA!");
} else {
digitalWrite(ledUmid, LOW);
}
Serial.println("-----------------------------");
delay(1000);
}