Contenido del curso

Actividad 5

 

Selector de programa

En esta actividad implementaremos tres programas diferentes dentro del mismo código. Cada pequeño programa, que se podrá reutilizar de las Actividades anteriores, hará lo siguiente:

  • Programa 1: Ejecuta un cronómetro que dura tantos segundos como el número guardado en una variable.

  • Programa 2: Imprime por monitor serial la tabla de multiplicar de un número almacenado en una variable.

  • Programa 3: Busca los múltiplos de un número almacenado en una variable dentro de los primeros cien números enteros.

Si te fijas, podremos reutilizar el número almacenado en la variable para los diferentes programas. Solamente necesitaremos una segunda variable donde indicamos con un número entero (1, 2 o 3) qué programa se ejecuta cada vez.

Recuerda que en Bloques no existe la sentencia switch case. Lo que podemos hacer es construirla con
otros bloques para terminar dándole la misma funcionalidad. Por ejemplo:


Recuerda que la estructura típica de una sentencia switch case es la siguiente:

switch(variable) {

    case valor1: // Si la variable es igual a valor1
       
        break;

    case valor2: // Si la variable es igual a valor2

        // Líneas de código
        break;

    default: // Acción por defecto si la variable no cumple ninguno de los cases

        break;
}

Hay que pasar a la sentencia una variable que posteriormente podamos comparar buscando que cumpla uno de los cases definidos. Siempre se define un caso por defecto, o default, para cubrir la posibilidad de que la variable dada no tome ninguno de los valores previstos.
Recuerda que, cuando no usas llaves, las variables definidas dentro de un case, son accesibles fuera
del bloque del propio case lo que puede llevar a un comportamiento inesperado o incluso, que el
programa falle si las variables no están inicializadas correctamente cuando se vuelve a utilizar
en el flujo de ejecución. Al usar las llaves, aseguras que la variable local sea solo accesible dentro
de ese bloque y no interfiera con otras partes del programa.

switch(variable) {

    case valor1: // Si la variable es igual a valor1
{ //llave de apertura del case
        float variable1 = 0.0;
        int variable2 = 0;
        break;
} //llave de cierre del case y sus variables locales

    case valor2: // Si la variable es igual a valor2

        // Líneas de código
        break;

    default: // Acción por defecto si la variable no cumple ninguno de los cases

        break;

}

Siempre que definas una variable dentro de un case (lo que llamamos variable local), es recomendable usar llaves {} para definir su alcance. Esto asegura que la variable solo sea válida dentro del bloque del case y no cause problemas de alcance o inicialización. Si no se definen variables locales en un case, aunque se utilicen variables globales, no es necesario añadir las llaves, pero puedes incluirlas igualmente.



Puedes descargar la solución pinchando en el siguiente icono:

// Establecemos el valor de esta variable para que se ejecute el programa que queramos
int seleccion = 1;

// Guardamos el número que usaremos en cualquiera de los tres programas disponibles
int numero = 5;

void setup() {

    // Inicializamos el monitor serie
    Serial.begin(9600);

    // Utilizamos la sentencia switch y detectamos la seleccion
    switch(seleccion) {

        // Caso donde seleccion vale 1, Cronómetro
        case 1:{

            float cuenta = 0; // Creamos una variable para guardar la cuenta

            // Utilizamos un bucle while para el contador
            while(cuenta <= numero) {

                Serial.println(cuenta); // Imprimimos el valor actual de la cuenta
                delay(100); // Esperamos antes de continuar contando
                cuenta += 0.1; // Aumentamos la cuenta

            }

            break;}

        // Caso donde seleccion vale 2, Tablas de multiplicar
        case 2:

            // Utilizamos un bucle for para imprimir la tabla de multiplicar
            for(int i = 1 ; i <= 10 ; i++) {

                Serial.print(numero); // Imprimos el número del que vamos a obtener la tabla
                Serial.print(" x "); // Imprimimos a continuación la primera parte constante del mensaje
                Serial.print(i); // Imprimimos a continuación el valor de la cuenta del for
                Serial.print(" = "); // Imprimimos a continuación la segunda parte constante del mensaje
                Serial.println(i * numero); // Imprimimos lo último el resultado de la operación y salto de línea

            }

            break;

        // Caso donde seleccion vale 3, Detector de múltiplos
        case 3:

            Serial.print("Los múltiplos de ");
            Serial.print(numero);
            Serial.println(" son:");

            // Utilizamos un bucle for para recorrer los primeros 100 números
            for(int i = 1 ; i <= 100 ; i++) {

                // Comprobamos si el valor actual es múltiplo del número indicado
                // (Si la división del valor entre el número es 0, entonces es múltiplo)
                if(i % numero == 0) {

                    Serial.println(i); // Mostramos el múltiplo

                } else {

                    Serial.println("."); // Mostramos el mensaje por defecto

                }

            }

            break;

        // Caso por defecto, si seleccion no coincide con ninguno de los anteriores
        default:

            Serial.println("No se ha escogido ningún programa...");
            break;

    }

}

void loop() {}
Vistas
9 Número de vistas
9 Vistas de miembros
0 Vistas públicas
Acciones
0 Gustos
0 No me gusta
0 Comentarios
Compartir en redes sociales
Compartir enlace
Compartir por correo

Por favor iniciar sesión para compartir esto webpage por correo.