Contenido del curso

Actividad 7

 

Simulador de control de luces

Esta actividad consiste en enviar información por bus serial a la placa y este en función del dato enviado, debe hacer una acción u otra. Simularemos el control de luces utilizando mensajes por el monitor serial.

Se van a plantear tres posibles acciones a ejecutar:

  • Si se envía un 1 por bus serial, se debe imprimir por el monitor "Luz número 1 encendida" o "apagada".

  • Si se envía un 2 se debe imprimir por monitor serial  "Luz número 2 encendida" o "apagada".

  • Si se envía un 3, se debe imprimir "Luz número 3 encendida" o "apagada".

Lo que programaremos será que mostraremos un mensaje u otro cada vez que se reciba cada número. El objetivo será que todas las luces comiencen apagadas, y según vayamos recibiendo por el monitor, alternaremos los estados de cada una de ellas entre encendido y apagado.

Recuerda que cuando recibimos datos por monitor serie, debemos utilizar la siguiente función para
comprobar si hay datos disponibles para leer:

Serial.available();

Esta función devuelve el número de bytes disponibles para leer, cero si no hay nada disponible en el
buffer de entrada del monitor serial.
Recuerda que para leer un byte por el monitor serial debes emplear la siguiente función:

Serial.read();

Esta función devuelve un byte leído del monitor serial. Posteriormente, deberemos transformar el dato a
tipo que quedamos. Esto puede hacerse en C/C++ colocando delante del valor que vamos a modificar
un paréntesis que encierre el tipo de dato al que codificarlo. Por ejemplo, aquí se muestra cómo pasar
el byte recibido desde el serial a un número entero:

int valorEntero = (int)Serial.read();
Actualmente no está disponible la solución a la actividad en Bloques.
// Se declara la variable donde guardaremos el número enviado por serial
// y que usaremos para seleccionar la acción a realizar
int sel = 0;

// Variables para guardar los estados de las luces
// - false: apagada.
// - true: encendida.
bool luz_1 = false;
bool luz_2 = false;
bool luz_3 = false;

void setup() {
    // Se inicializa el bus serial
    Serial.begin(9600);
}

void loop() {
    // Si hay un dato pendiente en el bus serial
    if(Serial.available()) {

        // Leemos el dato entrante por el monitor serial y lo convertimos a número
        sel = Serial.read() - '0';  // Convierte el carácter ASCII a su valor numérico

        switch(sel) {

            // Control de Luz número 1
            case 1:
                // Si está apagada, la encendemos
                if(luz_1 == false) {
                    Serial.println("Luz número 1 encendida.");
                }
                // Si está encendida, la apagamos
                else {
                    Serial.println("Luz número 1 apagada.");
                }
                // Guardamos el cambio de estado
                luz_1 = !luz_1;
                break;

            // Control de Luz número 2
            case 2:
                // Si está apagada, la encendemos
                if(luz_2 == false) {
                    Serial.println("Luz número 2 encendida.");
                }
                // Si está encendida, la apagamos
                else {
                    Serial.println("Luz número 2 apagada.");
                }
                // Guardamos el cambio de estado
                luz_2 = !luz_2;
                break;

            // Control de Luz número 3
            case 3:
                // Si está apagada, la encendemos
                if(luz_3 == false) {
                    Serial.println("Luz número 3 encendida.");
                }
                // Si está encendida, la apagamos
                else {
                    Serial.println("Luz número 3 apagada.");
                }
                // Guardamos el cambio de estado
                luz_3 = !luz_3;
                break;

            // Caso por defecto, por si se recibe algo desconocido
            default:
                Serial.println("Instrucción desconocida enviada...");
                break;
        }
    }
}
Vistas
7 Número de vistas
7 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.