#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Inicializa o display I2C
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Definições de pinos no ESP32
#define sensorDeUmidade 34
#define buzina 25
#define BtnMais 18
#define BtnMenos 19
// Variáveis
int limiteDeUmidade = 30;
int valorDoSensorDeUmidade = 0;
int umidadeDe_0a100 = 0;
void setup() {
// Inicialização dos pinos
pinMode(buzina, OUTPUT);
pinMode(BtnMais, INPUT_PULLUP);
pinMode(BtnMenos, INPUT_PULLUP);
// Inicializa I2C
Wire.begin(21, 22);
// Inicializa display
lcd.init();
lcd.backlight();
// Mensagem inicial
lcd.setCursor(0, 0);
lcd.print("Monitor Medonho");
lcd.setCursor(0, 1);
lcd.print("para Jardim");
delay(3000);
lcd.clear();
}
void loop() {
// Leitura do sensor (0 a 4095)
valorDoSensorDeUmidade = analogRead(sensorDeUmidade);
// Converte para escala 0–100%
umidadeDe_0a100 = map(valorDoSensorDeUmidade, 4095, 0, 0, 100);
// Botão para aumentar limite
if (digitalRead(BtnMais) == LOW) {
limiteDeUmidade += 5;
if (limiteDeUmidade > 100) limiteDeUmidade = 100;
delay(200);
}
// Botão para diminuir limite
if (digitalRead(BtnMenos) == LOW) {
limiteDeUmidade -= 5;
if (limiteDeUmidade < 0) limiteDeUmidade = 0;
delay(200);
}
// Atualiza display
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Umidad: ");
lcd.print(umidadeDe_0a100);
lcd.print("%");
lcd.setCursor(0, 1);
lcd.print("Limite: ");
lcd.print(limiteDeUmidade);
lcd.print("%");
// Aciona buzina se umidade < limite
/*
Opção com tons para ESP32 real:
ledcSetup(canalPWM, 1000, 8); // canal 0, frequência 1kHz, resolução 8 bits
ledcAttachPin(buzina, canalPWM);
*/
if (umidadeDe_0a100 < limiteDeUmidade) {
digitalWrite(buzina, HIGH); // Liga buzzer
lcd.setCursor(12, 0);
lcd.print("BAIXA");
lcd.setCursor(12, 1);
lcd.print("UMID");
} else {
digitalWrite(buzina, LOW); // Desliga buzzer
}
delay(1500);
}