#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
const int sensorUmidadeSoloPin = A0;
const int pinoLedVermelho = 5;
const int pinoLedAmarelo = 6;
const int pinoLedVerde = 7;
const int pinoRele = 10;
const int botaoLigarPin = 2;
const int botaoDesligarPin = 3;
const int limiteUmidadeSeco = 250;
const int limiteUmidadeUmido = 750;
bool sistemaLigado = false;
void setup() {
Serial.begin(9600); // Inicializa a comunicação serial com 9600 bauds
lcd.init();
lcd.begin(16, 2);
lcd.backlight();
lcd.print("Umidade Atual:");
pinMode(pinoLedVermelho, OUTPUT);
pinMode(pinoLedAmarelo, OUTPUT);
pinMode(pinoLedVerde, OUTPUT);
pinMode(pinoRele, OUTPUT);
digitalWrite(pinoRele, LOW);
pinMode(botaoLigarPin, INPUT_PULLUP);
pinMode(botaoDesligarPin, INPUT_PULLUP);
}
void loop() {
atualizarEstadoSistema();
if (sistemaLigado) {
int umidadeSolo = lerUmidadeSolo();
Serial.print("Umidade do Solo: ");
Serial.println(umidadeSolo); // Envia o valor da umidade do solo pela comunicação serial
atualizarStatusIrrigacao(umidadeSolo);
mostrarUmidadeLCD(umidadeSolo);
} else {
desligarSistema();
}
}
int lerUmidadeSolo() {
return analogRead(sensorUmidadeSoloPin);
}
void atualizarEstadoSistema() {
sistemaLigado = sistemaLigado ^ digitalRead(botaoLigarPin) == LOW;
if (digitalRead(botaoDesligarPin) == LOW) {
sistemaLigado = false;
desligarIrrigacao();
}
}
void atualizarStatusIrrigacao(int umidade) {
if (umidade < limiteUmidadeSeco) {
acionarIrrigacao();
setLedStatus(HIGH, LOW, LOW);
} else if (umidade < limiteUmidadeUmido) {
acionarIrrigacao();
setLedStatus(LOW, HIGH, LOW);
} else {
desligarIrrigacao();
setLedStatus(LOW, LOW, HIGH);
}
}
void mostrarUmidadeLCD(int umidade) {
int porcentagemUmidade = map(umidade, 0, 1023, 0, 100);
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(porcentagemUmidade);
lcd.print("%");
}
void acionarIrrigacao() {
digitalWrite(pinoRele, HIGH);
}
void desligarIrrigacao() {
digitalWrite(pinoRele, LOW);
}
void desligarSistema() {
setLedStatus(LOW, LOW, LOW);
desligarIrrigacao();
}
void setLedStatus(bool vermelho, bool amarelo, bool verde) {
digitalWrite(pinoLedVermelho, vermelho);
digitalWrite(pinoLedAmarelo, amarelo);
digitalWrite(pinoLedVerde, verde);
}