Hola, tengo un sistema de riego y tengo cuatro variables que son "int horaprimera", "int minutoprimera", "int horasegunda" e "int minutosegunda" y con ellas establezco las horas en el que el sistema de riego funciona. Yo puedo modificar el sketch y así lo tendría solucionado, pero quiero poder hacerlo desde la pantalla LCD con un teclado 4x4 para no tener que llevar el ordenador al invernadero para modificar las variables cuando sea necesario.
Todo esto lo estoy intentando hacer funcionar en un Arduino MEGA:
#include <LiquidCrystal.h>
#include <Keypad.h>
#include <TimeAlarms.h>
// Creamos un objeto lcd con los pines a los que está conectado
LiquidCrystal lcd(7, 8, 9, 10, 11 , 12);
// Creamos un array bidimensional para el control del teclado 4x4
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {26, 24, 22, 28}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {27, 25, 23, 29}; //connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
int z;
int y;
int w;
int u;
int x;
int horaprimera = 20; // horas del sistema de riego
int minutoprimera = 44; // minutos del sistema de riego
int horasegunda = 8; // horas del sistema de riego
int minutosegunda = 30; // minutos del sistema de riego
String num1,num2,num3,num4,num5,num6,num7,num8; // para contabilizar números
int movimiento; // para el movimiento del cursor en la pantalla LCD
boolean final = false; // // para sumar números y mostrarlos en pantalla LCD
void setup() {
// Preparar la interfaz serial
Serial.begin(9600);
//cargamos un objeto lcd e iniciamos la pantalla con 20 caracteres por línea y 4 líneas
lcd.begin(20, 4);
// Crear las alarmas y configurar las funciones correspondientes a cada una
Alarm.alarmRepeat(horaprimera, minutoprimera, 0, aperturaelectrovalvula); //Aquí seleccionamos con la variable la hora del primer riego, el minuto del primer riego, los segundos los dejamos a 0 y llamamos a la función aperturaelectrovalvula
Alarm.alarmRepeat(horasegunda, minutosegunda, 0, aperturaelectrovalvula); //Aquí seleccionamos con la variable la hora del segundo riego, el minuto del segundo riego, los segundos los dejamos a 0 y llamamos a la función aperturaelectrovalvula
}
void loop(){
char tecla = keypad.getKey();
if(tecla){
switch(tecla){
case 'A': //entra al menú´al pulsar la tecla 0
Serial.println("Tecla A");
menu();
break;
}
} else{
pantallaprincipal();
}
}
void menu(){
while(z<1){
char tecla = keypad.getKey();
// Texto a mostrar en pantalla LCD
lcd.setCursor(0,0);
lcd.write(" Elija una opcion ");
lcd.setCursor(0,2);
lcd.write("1 - Horario riegos "); //Aquí definimos los horarios de inicio y fin de riego
lcd.setCursor(0,3);
lcd.write("2 - inicio y fin "); //Aquí definimos las variables de humedad para el riego
lcd.setCursor(0,1);
lcd.write(" ");
Serial.println("Tecla pulsada: ");
if (tecla == '1') {
Serial.print(" Ver horarios");
riegos();
y=1;
z=1;
}
if (tecla == '2') {
Serial.print(" modificar horas");
definirvariablesinicioyfin();
y=1;
z=1;
}
if (tecla == '*') {
pantallaprincipal();
y=1;
z=1;
}
}
}
// Función principal para modificar las alarmas de riego
void riegos(){
while (y<1){
Serial.println(" Dentro de modificaralarmas() ");
lcd.setCursor(0,0);
lcd.write("1 - ver horarios ");
lcd.setCursor(0,1);
lcd.write("2 - modificar horas ");
char key2 = keypad.getKey();
if (key2 == '1') {
Serial.print(" Ver horarios");
verhorasriego();
y=1;
z=1;
}
if (key2 == '2') {
Serial.print(" modificar horas");
modificarhorasriego();
y=1;
z=1;
}
if (key2 == '*') {
Serial.print(" Volver a la pantalla principal");
y=1;
z=1;
pantallaprincipal();
}
if (key2 == 'A') {
Serial.print(" Volver al menú principal");
y=1;
z=1;
menu();
}
}
}
void verhorasriego(){
while (w<1){
lcd.setCursor(0,0);
lcd.write(" Horas de riego ");
lcd.setCursor(0,1);
lcd.write("1er riego: ");
lcd.setCursor(11,1);
printDigitsLCD(horaprimera);
lcd.setCursor(13,1);
lcd.write(":");
lcd.setCursor(14,1);
printDigitsLCD(minutoprimera);
lcd.setCursor(16,1);
lcd.write(":00 ");
lcd.setCursor(0,2);
lcd.write("2");
lcd.setCursor(1,2);
lcd.print((char)223);
lcd.setCursor(2,2);
lcd.print(" ");
lcd.setCursor(4,2);
lcd.write("riego: ");
lcd.setCursor(11,2);
printDigitsLCD(horasegunda);
lcd.setCursor(13,2);
lcd.write(":");
lcd.setCursor(14,2);
printDigitsLCD(minutosegunda);
lcd.setCursor(16,2);
lcd.write(":00 ");
lcd.setCursor(0,3);
lcd.write(" A volver o * salir ");
char key = keypad.getKey();
if (key == '*') {
pantallaprincipal();
y=1;
z=1;
w=1;
}
if (key == 'A') {
menu();
y=1;
z=1;
w=1;
}
}
}
void modificarhorasriego(){
while (y<1){
Serial.println(" Dentro de riegos ");
lcd.setCursor(0,0);
lcd.write(" Modificar Horarios");
lcd.setCursor(0,1);
lcd.write("1er horario:");
lcd.setCursor(12,1);
printDigitsLCD(horaprimera);
lcd.setCursor(12,1);
lcd.blink();
delay(100);
lcd.setCursor(14,1);
lcd.write(":");
lcd.setCursor(15,1);
printDigitsLCD(minutoprimera);
lcd.setCursor(17,1);
lcd.write(":00 ");
lcd.setCursor(0,2);
lcd.write("2 ");
lcd.setCursor(1,2);
lcd.print((char)223);
lcd.setCursor(2,2);
lcd.write(" ");
lcd.setCursor(4,2);
lcd.write("horario:");
lcd.setCursor(12,2);
printDigitsLCD(horasegunda);
lcd.setCursor(14,2);
lcd.write(":");
lcd.setCursor(15,2);
printDigitsLCD(minutosegunda);
lcd.setCursor(17,2);
lcd.write(":00 ");
lcd.setCursor(0,3);
lcd.write(" B aceptar A menu ");
char key1 = keypad.getKey();
if (key1 != NO_KEY && (key1=='1'||key1=='2'||key1=='3'||key1=='4'||key1=='5'||key1=='6'||key1=='7'||key1=='8'||key1=='9'||key1=='0')){
while (u<1){
num1 = key1;
lcd.setCursor(12,1);
lcd.print(num1);
char key2 = keypad.getKey();
if (key2 != NO_KEY && (key2=='1'||key2=='2'||key2=='3'||key2=='4'||key2=='5'||key2=='6'||key2=='7'||key2=='8'||key2=='9'||key2=='0')){
num2 = key2;
lcd.print(num2);
}
char key3 = keypad.getKey();
if (key3 != NO_KEY && (key3=='1'||key3=='2'||key3=='3'||key3=='4'||key3=='5'||key3=='6'||key3=='7'||key3=='8'||key3=='9'||key3=='0')){
num3 = key3;
lcd.setCursor(15,1);
lcd.print(num3);
char key4 = keypad.getKey();
if (key4 != NO_KEY && (key4=='1'||key4=='2'||key4=='3'||key4=='4'||key4=='5'||key4=='6'||key4=='7'||key4=='8'||key4=='9'||key4=='0')){
num4 = key4;
lcd.print(num4);
}
}
}
}
}
}
void pantallaprincipal(){
lcd.println("Pantalla Principal");
}
// Si los minutos o segundos son inferiores a 10, pone un cero a la izquierda en la pantalla LCD.
void printDigitsLCD(int digits) {
if (digits < 10)
lcd.print('0');
lcd.print(digits);
}
// Si la hora es inferior a 10, pone un cero a la izquierda en la pantalla LCD
void printDigitsLCDHora(int digits) {
if (digits < 10)
lcd.print(' ');
lcd.print(digits);
}
void aperturaelectrovalvula(){
}
void definirvariablesinicioyfin(){
}