#include <NewPing.h> // Importa la librería NewPing para el sensor ultrasónico HC-SR04. HAY QUE DESCARGAR LA LIBRERIA
#include <Keypad.h> // Importa la librería Keypad para el teclado matricial. HAY QUE DESCARGAR LA LIBRERIA
#include <Wire.h>
const int humedadPin = A1; // Pin analógico para el sensor de humedad
const int bbarelePin = 1; // Pin 1 para el relé de la bomba de riego y la valvula
const int pinLDR = A0; // Define el pin analógico al que está conectada la LDR
const int pinD12 = 12; // Define el pin digital 12
const int pinD13 = 13; // Define el pin digital 13
const byte ROWS = 2; // 2 filas en el teclado
const byte COLS = 2; // 2 columnas en el teclado
char key;
// Define los pines para el sensor ultrasónico
#define triggerPin 8
#define echoPin 9
NewPing sonar(triggerPin, echoPin); // Crea un objeto NewPing asociado al sensor ultrasonico
// Definición de las teclas en el teclado matricial
char keys[ROWS][COLS] = {
{'MANUAL','AUTOMATICO'},
{'SUBIR','BAJAR'}
};
// Definición de pines de las filas y columnas del teclado
byte rowPins[ROWS] = {5, 4}; // Conectar a los pines de fila del teclado
byte colPins[COLS] = {7, 6}; // Conectar a los pines de columna del teclado
// Crear un objeto de tipo Keypad CONSULTAR!!!!
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
// Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); //consultar sobre esta sentencia de ChatGPT
int modo = 1; // Variable para el modo (0 para manual, 1 para automático)
int valorLDR = 0;
void setup() {
Serial.begin(9600); // Inicia la comunicación serial
pinMode(bbarelePin, OUTPUT); //Pin 1 para el relé de la bomba de riego y la valvula
pinMode(pinD12, OUTPUT); // Configura D12 como salida digital SUBIR
pinMode(pinD13, OUTPUT); // Configura D13 como salida digital BAJAR
}
void loop() {
// int valorLDR = analogRead(pinLDR); // Lee el valor analógico de la LDR conectada en A0
int valorLDR = 1023 - analogRead(pinLDR);
// Convierte el valor analógico a porcentaje (valor aproximado)
float porcentaje = (valorLDR / 1023.0) * 100; // formula teorica
// Imprime el valor de iluminación en porcentaje en el puerto serie
Serial.print("Nivel de Iluminacion (%): ");
Serial.println(porcentaje);
Serial.print("Valor LDR: ");
Serial.println(valorLDR);
// Espera un breve periodo antes de la siguiente lectura
delay(1000);
// Mide la distancia con el sensor ultrasónico HC-SR04
unsigned int distancia = sonar.ping_cm();
if (modo == 1 && distancia > 10 && distancia < 90) { // modo = 1 = AUTOMATICO y distancia dentro del rango
if (porcentaje > 60.0) {
// Si el porcentaje es mayor al 60%, activa la salida en D13
digitalWrite(pinD13, HIGH);
digitalWrite(pinD12, LOW); // Asegúrate de que D12 esté apagado
} else if (porcentaje < 50.0) {
// Si el porcentaje es menor al 50%, activa la salida en D12
digitalWrite(pinD12, HIGH);
digitalWrite(pinD13, LOW); // Asegúrate de que D13 esté apagado
} else {
// En otros casos, asegúrate de que ambas salidas estén apagadas
digitalWrite(pinD12, LOW);
digitalWrite(pinD13, LOW);
}
} else {
}
if (distancia < 10 || distancia > 90 ) {
// Se detiene el movimiento de la cortina si la distancia es menor a 10 cm o si es mayor a 90 cm
// Verificar PRIORIDADES si se escribe una salida en HIGH y LOW al mismo tiempo
digitalWrite(pinD12, LOW);
digitalWrite(pinD13, LOW);
}
Serial.print("La distancia de la apertura de la cortina es: ");
Serial.println(distancia);
//key = keypad.getKey();
char key = keypad.getKey();
if (key) {
switch (key) {
case 'Automatico':
// Presionar "Automatico" cambia el modo a automático (modo = 1)
modo = 1;
// Serial.println("Modo Automático"); OPCIONAL
break;
case 'Manual':
// Presionar "Manual" cambia el modo a manual (modo = 0)
modo = 0;
// Serial.println("Modo Manual"); OPCIONAL
break;
case 'Subir':
// Realiza la función "Subir"
if (modo = 0) {
while (keypad.getState() == HOLD) {
digitalWrite(12, HIGH); // Activa la salida 12 SUBIR mientras mantienes presionada la tecla
}
digitalWrite(12, LOW); // Desactiva la salida 12 SUBIR cuando sueltas la tecla
}
break;
case 'Bajar':
// Realiza la función "Bajar"
if (modo = 0) {
while (keypad.getState() == HOLD) {
digitalWrite(13, HIGH); // Activa la salida 13 BAJAR mientras mantienes presionada la tecla
}
digitalWrite(13, LOW); // Desactiva la salida 13 BAJAR cuando sueltas la tecla
}
break;
}
}
}