#include <LiquidCrystal.h>
#include <Servo.h>
#include <Keypad.h>
// Inicializa objetos para el LCD y el Servo
LiquidCrystal lcd(A4,A5);
Servo miServo;
// Define pines para el sensor de humedad, LEDs, servo y Keypad
const int humedadPin = A0;
const int ledVerde = 11;
const int ledRojo = 9;
const byte FILAS = 4;
const byte COLUMNAS = 4;
char keys[FILAS][COLUMNAS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte pinesFilas[FILAS] = {8, 7, 6, 5};
byte pinesColumnas[COLUMNAS] = {4, 3, 2, 1};
Keypad teclado = Keypad(makeKeymap(keys), pinesFilas, pinesColumnas, FILAS, COLUMNAS);
// Variables para almacenar la humedad y el tiempo de riego
int humedad;
int tiempoRiego;
void setup() {
// Inicializa el LCD y mostrar mensaje de inicio
lcd.begin(A4, A5);
lcd.print("Leyendo humedad...");
// Inicializa el Servo en la posición inicial
miServo.attach(10);
miServo.write(0);
// Configura pines de LEDs como salidas
pinMode(ledVerde, OUTPUT);
pinMode(ledRojo, OUTPUT);
}
void loop() {
// Lee la humedad para mapearla a un rango del 0 al 100
humedad = analogRead(humedadPin);
humedad = map(humedad, 1023, 0, 0, 100);
// Verifica si la humedad es baja (menor al 60%)
if (humedad < 60) {
// Muestra mensaje en el LCD si la humedad es menos del 60%
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Humedad baja");
lcd.setCursor(0, 1);
lcd.print("Tiempo de riego:");
int leerTeclado() {
char tecla = NO_KEY;
String numeroStr = "";
int numero;
while(tecla != 'A') {
tecla = teclado.getKey();
if(isDigit(tecla)) {
numeroStr += tecla;
lcd.print(tecla);
}
}
numero = numeroStr.toInt();
return numero;
} // Código para leer un número por el teclado
// Muestra mensaje en el LCD indicando el riego
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Regando");
lcd.setCursor(0, 1);
lcd.print(tiempoRiego);
// Activa el servo para regar y enciende el LED verde
miServo.write(90);
digitalWrite(ledVerde, HIGH);
delay(tiempoRiego * 1000);
// Desactiva el servo y apagar el LED verde después del tiempo de riego
miServo.write(0);
digitalWrite(ledVerde, LOW);
} else {
// Si la humedad es suficiente, hace parpadear el LED rojo
digitalWrite(ledRojo, HIGH);
delay(500);
digitalWrite(ledRojo, LOW);
}
}