Buenos días,
Soy nuevo en esto de la programación y me surgen problemas con un programa muy sencillo. Este se trata de la creación de un menú por consola que posee 4 opciones: 1. Saludo/ 2. Encender luces/ 3. Evitar explosión / 4. Fin del programa.
Una vez seleccionas los diferentes apartados debe hacer una serie de cosas:
1- Debe preguntarte el nombre, después debes escribirlo y te tiene que contestar Hola y el nombre que has introducido. Va unido al 4 ya que debe guardar este nombre y al darle al 4 debe decir "Adios" + nombre.
2 - Debe preguntar si queremos encender el led integrado en la placa y responder con un si o un no.
3 - Debes introducir una serie de números que aparecen en pantalla en el orden correcto y si fallas la bomba explota y muestra por pantalla un Boom mientras que si lo escribes correctamente sigue pidiendo los números hasta que haya finalizado el vector.
Tengo problemas ya que me muestra por pantalla el menú y al introducir la elección del menú (con un Switch), tarda mucho en mostrarme los diferentes casos o en otras ocasiones me guarda información antes de que aparezca por pantalla la opción que yo quiero.
Adjunto código. Muchas gracias de antemano.
void setup() {
Serial.begin(9600);
pinMode(LED_BUILTIN, OUTPUT);
Serial.println("1. Saludo.");
Serial.println("2. Encender luz.");
Serial.println("3. Evitar explosión.");
Serial.println("4. Fin.");
//nombre = String();
}
int valor () //función que devuelve entero
{
while (Serial.available()==0);//bloquea hasta que escriba
delay (10); //tiempo para que lleguen todos los caracteres al buffer
int x = 0; //inicialización de la salida
String inString = ""; //almacenamiento externo del buffer
while (Serial.available() > 0) //mientras haya caracteres en el buffer Serial
{
int inChar = Serial.read(); //lee caracter
if (isDigit(inChar)) //si es un dígito, no carácter nulo...
{
inString = inString + (char)inChar; //convierte byte entrante a char y suma este al String:
}
if (inChar == '\n') // si es el último caracter (nulo)
{
x = inString.toInt(); //conviértelo a entero
}
}
return x; //devuelve entero si hay, sino 0.
}
String frase () //función que devuelve cadena
{
while (Serial.available()==0); //bloquea hasta que escriba
delay (20); //da tiempo para que lleguen todos los caracteres al buffer
String inString = ""; //almacenamiento externo del buffer
while (Serial.available() > 0) //mientras haya caracteres en el buffer Serial
{
int inChar = Serial.read(); //lee carácter
if (inChar == '\n' || inChar == '\r' ) //si último caracter (nulo) o retorno
{inString = inString;} //quitarlo para que haya no doble salto línea o retorno
else {inString = inString + (char)inChar;} //añádelo a la cadena
}
return inString; //devuelve frase
}
void loop() {
int x, encendido;
x = valor();
x = Serial.read();
String nombre;
nombre = frase();
while(Serial.available() == 0) { }
switch(x){
case 1:
{
Serial.println("¿Cuál es tu nombre?.");
while(Serial.available()==0){}
delay(1000);
nombre =Serial.readString();
while(Serial.available() == 0){}
delay(1000);
Serial.println("Hola" + nombre);
break;
}
case 2:
{
Serial.println("¿Quiere encender la luz?");
//if (Serial.available() > 0) {
encendido = Serial.read();
if (encendido == 'S') {
digitalWrite(LED_BUILTIN, HIGH);
}
if (encendido == 'N') {
digitalWrite(LED_BUILTIN, LOW);
}
break;
}
case 3:
{
Serial.println("Para desactivar la bomba debes meter los siguientes numeros: 4, 8, 15, 16, 23, 42");
Serial.println("Introduzca numero: ");
int cadena [] = {4,8,15,16,23,42};
int micadena [6];
for (int i=0; i<6; i++){
micadena[i]= valor();
if(micadena[i]==cadena[i]){
Serial.println("Siguiente numero: ");
}else{
Serial.println("BOOOOM!!!!!");
break;
}
}
break;
}
case 4:
{
Serial.print("Adios "); Serial.print(nombre); Serial.print(". Fin del programa.");
break;
}
}
}