Hola, soy nuevo en el foro y en la programación, he querido hacer un menú para para un display LCD 16X2 para seleccionar por medio de interruptores tipo push button la forma en que trabajara mi circuito, la forma automática, la manual y la temporizada. El problema empieza al querer hacer que el usuario pueda seleccionar entre uno de esos tres modos.
Inicialmente el programa ejecuta una serie de instrucciones y quiero que el usuario pueda ingresar el menú de opciones, para ello utilizo una interrupción, la cual entra cuando un botón en el pin 2 de arduino cambia de estado de 0 a 1.
Esta interrupción llama a una función llamada ajustes la cual pretende hacer el cambio de modos de trabajo (automático, manual, temporizada).
Mi problema comienza al querer hacer el cambio de estos modos, debido a que la interrupción si llama correctamente al void ajustes mostrando el mensaje “Seleccione modo”, pero al presionar los interruptores para el cambio de opciones no sucede nada.
Gracias por su tiempo.
Mi placa es un Arduino MEGA 2560
El codigo es el siguiente:
#include <LiquidCrystal.h> // Libreria para usar la LCD I2C 16x2 (en este caso.
LiquidCrystal lcd(22, 23, 24, 25, 26, 27); // Pines de conexion del arduino al LCD (RS, EN, d4, d5, d6, d7) **RW por defecto va a tierra.**
int subir = 41;
int bajar = 42;
int OK = 43;
int cancelar = 44;
int seleccion_modo = 0;
const int entradas[]{ 41, 42, 43, 44 };
void setup(){
for (int b = 0; b <= 3; b++){ // Configuramos los pines del arreglo como ENTRADAS.
pinMode(entradas[b], INPUT);
}
pinMode(13, OUTPUT);
lcd.begin(16, 2); // Iniciamos la LCD.
lcd.clear(); // Limpia la LCD.
attachInterrupt(0, MenuConfiguraciones, RISING);
}
// Interrupcion que salta al void ajustes para la configuracion del sistema.
void MenuConfiguraciones(){
ajustes();
}
//void que permite seleccionar entre el control automatico, el control manual o el control temporizado.
void ajustes(){
int arriba = digitalRead(subir);
int abajo = digitalRead(bajar);
int guardar = digitalRead(OK);
int salir = digitalRead(cancelar);
String seleccion[]{"Automatico", "Manual", "Temporizado"};
int modo_anterior = seleccion_modo;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Seleccione modo");
do{
if (abajo == 1){
seleccion_modo = (seleccion_modo -1);
if (seleccion_modo == -1){
seleccion_modo = 2;
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Modo de trabajo:");
lcd.setCursor(0, 1);
lcd.print(seleccion[seleccion_modo]);
}
else if(arriba == 1){
seleccion_modo = (seleccion_modo +1);
if (seleccion_modo == 3){
seleccion_modo = 0;
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Modo de trabajo:");
lcd.setCursor(0, 1);
lcd.print(seleccion[seleccion_modo]);
}
else if (salir ==1){
seleccion_modo = modo_anterior;
lcd.clear();
}
}while (salir == 0 && guardar == 0);
if (seleccion_modo == 0){
Control_Automatico();
}
else if (seleccion_modo == 1){
Control_Manual();
}
else if (seleccion_modo == 2){
Control_Temporizado();
}
}
void loop(){
digitalWrite(13, 1); //(solo es un ejemplo del codigo principal)
delay(1000);
digitalWrite(13, 0);
delay(1000);
}