Creación de menú interactivo en ide

Hola, llevo todo dos días intentando entender como arreglar mi código pero no tengo a quien preguntar y sin tratamiento para mi déficit de atención me resulta ya demasiado, hace mucho que no toco código y se que tiene que haber muchos errores, es un arduino uno, he buscado ejemplos y ayuda en internet y nada, dejo el enunciado y mi intento de código aquí si alguien pudiera ayudarme, muchas gracias:
Diseña el programa que te proponemos en los apartados siguientes, completando en cada paso cada una de sus partes; si no sabes completar un apartado, simúlalo para que funcione al menos con constantes, imprimiendo lo que debería, para poder seguir.

a) Imprime el siguiente menú con opciones y haz que pregunte, en el primer caso, el nombre de usuario en
el monitor serial y que conteste “Hola nombreusuario”, y que en el cuarto caso, se despida con el nombre
“Adiós nombredeusuario. Fin del programa” y, por último, que salga para acabar el programa (cuando se
pulse una tecla u opción no realice nada). Ahora mismo no hace falta hacer nada en los otros casos.

  1. Saludo.
  2. Encender Luz.
  3. Evitar explosión.
  4. Fin.
    b) En el segundo caso, pregunta si se quiere encender la luz (led incorporado en Arduino), si contesta N o NO,
    apaga el led; si contesta S o SÍ, enciende el led.
    c) En el tercer caso debe pedir, guardar y luego imprimir el siguiente vector de LOST: 4 8 15 16 23 42 . Comprueba
    que cuando se introduce un número sea el correcto, si no, escribe "BOOOM!!";.
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.");
}

String frase() {
  String inString = "";
  while (Serial.available() > 0) {
    char inChar = Serial.read();
    if (inChar == '\n' || inChar == '\r') {
      inString.trim();
      return inString;
    } else {
      inString += inChar;
    }
  }
  return "";
}

void loop() {
  int x;
  String nombre;

  x = Serial.parseInt();
  
  switch (x) {
    case 1:
      Serial.println("¿Cuál es tu nombre?");
      delay(1000); // Espera a que se complete la entrada del usuario
      nombre = frase();
      Serial.println("Hola " + nombre);
      break;
    case 2:
      Serial.println("¿Quiere encender la luz? (S/N)");
      while (!Serial.available()) {} // Espera a que el usuario ingrese una opción
      char encendido = Serial.read();
      if (encendido == 'S' || encendido == 's') {
        digitalWrite(LED_BUILTIN, HIGH);
      } else if (encendido == 'N' || encendido == 'n') {
        digitalWrite(LED_BUILTIN, LOW);
      }
      break;
    case 3:
      {
        int cadena[] = {4, 8, 15, 16, 23, 42};
        Serial.println("Para desactivar la bomba debes meter los siguientes numeros: 4, 8, 15, 16, 23, 42");
        Serial.println("Introduzca numero: ");
        for (int i = 0; i < 6; i++) {
          while (!Serial.available()) {} // Espera a que el usuario ingrese un número
          int micadena = Serial.parseInt();
          if (micadena == cadena[i]) {
            if (i < 5) {
              Serial.println("Siguiente numero: ");
            } else {
              Serial.println("Bomba desactivada.");
            }
          } else {
            Serial.println("***BOOOM!!!!!***");
            return;
          }
        }
      }
      break;
    case 4:
      Serial.print("Adios ");
      Serial.print(nombre);
      Serial.println(". Fin del programa.");
      delay(1000); // Espera para que el mensaje se muestre completamente
      exit(0); // Termina el programa
      break;
    default:
      break;
  }
}

Pues el profesor tampoco se calienta la cabeza... Ese ejercicio ya lo puso hace tiempo otra vez y lo resolvimos... Aqui tienes el ENLACE

1 Like

no mucho no, jajaja, muchísimas gracias.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.