Im sorry for not posting the whole code, i thought it wouldn't be needed, also let me explain something.
I tried several options but all recalls the keyboard and does not separates instances or sequence of events,
i mean that if first menu is on the screen, it works just fine, but if i enter to the second menu to have
some other options, the options in the first menu are still available, its like an open window that
allows in every moment have all the options, and separating in functions is all i could think of
here is the complete code as it is, and also i tried to make a separated keyboard for separated instances
//Proyecto camara GoPro controlada desde una Moto
//Este programa pretende que comodamente desde un teclado
//se pueda tener acceso a mover un servo motor con una
//camara GoPro para tener varias tomas durante un viaje,
//el hacerlo asi permite que se puedan ver varios angulos
//sin tener la necesidad de parar a ajustar un nuevo angulo
//sino desde el manubrio poder presionar botones con posiciones
//prestablecidas para no preocuparse por eso.
//En otra parte se podra con un potenciometro generar una
//manipulacion del servo motor con solo girar la manecilla
//para que el servo llegue a esa posicion.
//Otra de las funciones mas importantes es el uso de un TimeLapse
//el cual se podra programar desde una posicion inicial
//hasta una final estableciendo el tiempo que debera el
//servo cumplir con la tarea.
// Librerias
#include <Servo.h>
#include <Keypad.h>
#include <SoftwareSerial.h>
#include <serLCD.h>
//Declaraciones pantalla LCD
int lcdp = 2;
serLCD lcd(lcdp);
//Declaraciones para el teclado
const byte fil = 4;
const byte col = 4;
char teclas[fil][col] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte filas[fil] = {11,10,9,8};
byte columnas[col] = {7,6,5,4};
Keypad TecladoM = Keypad (makeKeymap(teclas),filas,columnas,fil,col);
//Declaraciones para el Servo Motor y potenciometro
const int servo = 3 ; //Espero que este sea un PWM
const int pot = 0; //Entrada analoga 0
int val = 0; //Para guardar la lectura del Potencionmetro
Servo myServo; //llama a un objeto de Servo llamado myServo
//cada vez que quiera que el servo haga algo
//me refiero a myServo
void setup()
{
Serial.begin(9600); //esto es por si queiro ver que esta pasando
myServo.attach(servo);
MenuInicio();
}
//Esta funcion escribe en la pantalla el menu de Inicio
void MenuInicio()
{
lcd.clear();
lcd.setBrightness(25);
lcd.selectLine(1);
lcd.print("--Selecciona--");
lcd.selectLine(2);
lcd.print("* - Manual ");
lcd.selectLine(3);
lcd.print("# - Circuito ");
lcd.selectLine(4);
lcd.print("T - Timelapse");
}
//Esta Funcion es la que recibe comandos con los botones listos con los grados
void preDefinidos()
{/*
// char teclaV = Teclado.getKey();
//Lo primero que hace el programa es esperar tecla
if (int (teclaV) == '4')
{
myServo.write (0); //pone el servo en la posicion
Serial.println(0);
delay(15);
}
if (int (teclaV) == '7')
{
myServo.write (45); //pone el servo en la posicion
Serial.println(45);
delay(15);
}
if (int (teclaV) == '8')
{
myServo.write (90); //pone el servo en la posicion
Serial.println(90);
delay(15);
}
if (int (teclaV) == '9')
{
myServo.write (135); //pone el servo en la posicion
Serial.println(135);
delay(15);
}
if (int (teclaV) == '6')
{
myServo.write (180); //pone el servo en la posicion
Serial.println(180);
delay(15);
} */
}
//Esto es lo que se despliega durante el uso de la funcion Potenciometro
void desplieguePotenciometro()
{
lcd.clear();
lcd.setBrightness(25);
lcd.selectLine(1);
lcd.print(" Angulo Mobil ");
lcd.selectLine(2);
lcd.print("Angulo Actual");
lcd.setCursor(3,8);
lcd.print("Grados");
lcd.setCursor(4,5);
lcd.print("0 - Salir");
}
//Esta funcion mueve el potenciometro desplegando el angulo de giro
void potenciometro()
{/*
desplieguePotenciometro();
char teclaP = Teclado.getKey();
val = analogRead(pot); //leo la posicion del potenciometro
val = map(val,0,1023,0,180); //escala para el rango del servo, con grados
myServo.write (val); //pone el servo en la posicion
lcd.setBrightness(25);
lcd.selectLine(1);
lcd.print(val);
delay(15);
potenciometro();
if ((teclaP) == '0')
{
}*/
}
//Esta funcion es el menu manual
void menuManual()
{
//cada vez que quiera que el teclado manual haga algo
//me refiero a TecladoM
char b = TecladoM.getKey();
lcd.clear();
lcd.setBrightness(25);
lcd.selectLine(1);
lcd.print(" Modo MANUAL ");
lcd.selectLine(2);
lcd.print("A - Angulo Mobil");
lcd.selectLine(3);
lcd.print("B - PreDefinidos");
lcd.selectLine(4);
lcd.print("0 - Salir ");
switch (b)
{
case '0':
MenuInicio();
break;
case 'A':
desplieguePotenciometro();
break;
case 'B':
preDefinidos();
break;
}
}
//Esta funcion es para decidir a que parte del programa se dirige
// el usuario y en cada una de ellas definire una lectura de teclado
//independiente, es decir una variable local
void Principal()
{
Keypad TecladoP = Keypad (makeKeymap(teclas),filas,columnas,fil,col); //cada vez que quiera que el teclado principal haga algo
//me refiero a TecladoP
char a = TecladoP.getKey(); //Lo primero que hace el programa es esperar tecla
switch (a)
{
case '*':
menuManual();
break;
case '#':
desplieguePotenciometro();
break;
case 'D':
//Timelapse();
break;
}
}
//ESte es el ciclo infinito del Arduino
void loop()
{
Principal();
}
Also i dont really understand your code,
void keyboard_request() { // and again...and again
char tecla = keypad.getKey(); //Lo primero que hace el programa es esperar tecla
switch (tecla)
{
case '*':
what is this function??
How does it separates the instances?
void keyboard_request() { // and again...and again
char tecla = keypad.getKey(); //Lo primero que hace el programa es esperar tecla
thank you very much for the reply.