Los problemas son que, despues de seleccionar una de las opciones, las demas quedan bloqueadas corriendo solo la subrutina seleccionada, deberia poderse "retroceder al menu principal para poder seleccionar otra función".
El otro problema es que, en codigo "stack" hay una parte que no debe repetirse pero seguida de esta, y con un tiempo ya establecido que no debe cambiar, debe realizar la siguiente parte del codigo:
así:
"EN void setup() esta parte"
servo1.write(86);
delay(723.2);
"En void loop() esta otra"
servo1.write(66);
delay(121.1);
servo1.write(86);
delay(658);
// MENU FUSIONANDO 2 COGIGOS (STAK Y SERVO CONTROL CON POTENCIOMETRO);
//sonido
int buzzer = 10;
//keypad
#include <Keypad.h>
const byte ROWS = 4; // Cuatro Filas
const byte COLS = 4; // Cuatro Columnas
// Definimos el Keymap
char keys[ROWS][COLS] = {
{'1','4','7','*'},
{'2','5','8','0'},
{'3','6','9','#'},
{'A','B','C','D'}
};
byte rowPins[ROWS] = {3,2,1,0};// Conectar los keypads ROW1, ROW2, ROW3 y ROW4 a esos Pines de Arduino.
byte colPins[COLS] = {7,6,5,4};// Conectar los keypads COL1, COL2, COL3 y COL4 a esos Pines de Arduino.
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
//display lcd
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd (0x27,16,2);
#include <Wire.h>
//servocontrol
#include <Servo.h>
Servo servo_2;
int potenciometro_1 = 0;
int valor_potenciometro_1;
//stack
Servo servo1;
int conteo = 1;
void setup() {
// put your setup code here, to run once:
char key = keypad.getKey();
sonido();
lcd.clear();
servo1.attach(12);
servo_2.attach(8);
iniciodisplay();
servo1.write(90);
servo_2.write(90);
servo1.write(86); //108
if(key=='B' & key!='C' & key!='*') //esta es la parte que solo debe repetirse al inicio cada vez que se cumpla la condicion...
{
lcd.clear();
delay(1000);
servo1.write(66); //balor bajo 90
delay(122); //199
servo1.write(86); //108
delay(723.2);
}
if(key=='*' & key!='B' & key!='C')
{
delay(100);
sonido();
lcd.setCursor(0,0);
lcd.print("opciones:B=stack");
lcd.setCursor(0,1);
lcd.print("C = servoControl");
lcd.setCursor(16,1);
lcd.print(key);
}
}
void servocontrol(){
lcd.setCursor(0,0);
lcd.print("Valor de potenciometro =");
lcd.setCursor(0,1);
lcd.print(valor_potenciometro_1);
valor_potenciometro_1 = analogRead(potenciometro_1);
valor_potenciometro_1 = map(valor_potenciometro_1, 0, 1023, 20, 180);
servo_2.write(valor_potenciometro_1);
delay(1);
}
void iniciodisplay(){
delay(50);
Wire.begin();
lcd.begin(16,2);
lcd.clear();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Procesando");
delay(300);
lcd.print(".");
delay(300);
lcd.print(".");
delay(300);
lcd.print(".");
delay(300);
lcd.clear();
lcd.print("Procesando");
delay(300);
lcd.print(".");
delay(300);
lcd.print(".");
delay(300);
lcd.print(".");
delay(300);
lcd.clear();
delay(300);
lcd.setCursor(0,0);
lcd.print("ACTIVACION");
delay(500);
lcd.setCursor(0,1);
lcd.print("EXITOSA");
delay(1000);
lcd.clear();
delay(100);
lcd.setCursor(0,0);
lcd.print("para opciones");
lcd.setCursor(0,1);
lcd.print("oprima >*<");
delay(4000);
}
void stack(){
lcd.setCursor(0,1);
lcd.print(conteo++);
digitalWrite(3,LOW);
lcd.setCursor(0,0);
lcd.print("MOVIMENTOS");
servo1.write(66);
delay(121.1);
servo1.write(86);
delay(658);
}
void sonido(){
tone(buzzer,600);
delay(70);
noTone(buzzer);
delay(70);
tone(buzzer,600);
delay(70);
noTone(buzzer);
}
void loop() {
char key = keypad.getKey();
if(key=='B' & key!='C' & key!='*')
{
stack(); //tiene un código del cual una parte no debe repetirse...
}
if(key=='C' & key!='B' & key!='*')
{
servocontrol();
}
}