Teach Lecciones con laboratorios remotos

Lección Teach

STM32 Mbed CodeIDE (2/8): secuencias de LED y temporización

El alumnado programa secuencias temporizadas de LEDs en una placa STM32 real con DigitalOut y esperas de Mbed, cambia el ritmo y explica el orden observado.

  • STM32 Nucleo (Mbed)
  • 55 min
  • Secundaria (16–19 años)
  • Español
  • Sistemas embebidos
STM32 Nucleo (Mbed)
STM32 Nucleo (Mbed)

Resultados de aprendizaje

  • Controlar varios pines DigitalOut de Mbed en una secuencia planificada.

  • Usar cambios de temporización para hacer más observable un patrón de salida.

  • Explicar la relación entre el orden del código y el orden físico de los LED.

Vista previa de la actividad del estudiante

Contenido de la actividad

Solo vista previa. En una sesión de clase, los estudiantes pueden completar respuestas y entregar su trabajo al docente.

1

Planificar la secuencia

8 min

Un microcontrolador sigue exactamente el orden de tu código. El programa siguiente usará llamadas auxiliares como led_on(led1) para que el código se lea como la acción física que quieres ver.

Si escribes:

led_on(led1);
ThisThread::sleep_for(500ms);
led_on(led2);

entonces el LED 1 debería encenderse antes que el LED 2.
El LED 1 permanecerá encendido mientras se enciende el LED 2, porque el código todavía no ha llamado a led_off(led1).

Esta lección usa tres pines de salida Mbed disponibles en el laboratorio STM32 WB55RG:

- PB_13
- PB_14
- PB_15

Son salidas de LED verdes personalizados de la placa de entrenamiento. En los ejemplos locales de Mbed en CodeIDE son activos en bajo: escribir 0 enciende uno y escribir 1 lo apaga. Por eso el código inicial usa funciones auxiliares en vez de pedirte que memorices la polaridad 0/1 en bruto.

En Mbed, cada línea DigitalOut crea un objeto de salida conectado a un pin STM32. El objeto mantiene su último valor mientras el programa espera, así que ThisThread::sleep_for(500ms) pausa el código sin borrar el estado del LED que acabas de fijar.

Usa este mapa cuando compares tu código con la cámara:

- led1 = PB_13 = LED verde más a la izquierda del grupo de tres.
- led2 = PB_14 = LED verde central de ese grupo.
- led3 = PB_15 = LED verde más a la derecha de ese grupo.

Tres LED verdes usados en esta lección

Diagrama recortado de la placa de entrenamiento que resalta los tres LED verdes usados en esta lección: led1 PB_13, led2 PB_14 y led3 PB_15.

Usa la vista de cámara para comprobar el orden de este grupo visible de LED. Si cuesta distinguirlos, ralentiza el patrón a 1000ms, usa el mapa anterior y registra no distinguible en cámara solo si la cámara sigue sin confirmar el orden.

En el encabezado auxiliar DigitalOut &led, el & significa que la función trabaja sobre el objeto LED real que le pasas, no sobre una copia. En 500ms, ms significa milisegundos.

Si el LED 1 se enciende y 500 ms después se enciende el LED 2, y 500 ms después se enciende el LED 3, ¿qué debería ver la persona observadora antes de que se ejecute all_off()?

2

Ejecutar la secuencia guiada

26 min

  1. Abre el laboratorio STM32 Mbed CodeIDE.

  2. Abre main.cpp.

  3. Reemplaza el archivo con el código siguiente.

  4. Guarda, compila y carga.

  5. Observa al menos tres ciclos completos y anota el orden de los LED y el ritmo.

  6. Cambia step_delay de 500ms a 250ms o 1000ms.

  7. Guarda main.cpp, compila, carga y compara si el nuevo patrón es más fácil o más difícil de verificar.

  8. Solo después de completar el paso 7, pulsa Marcar práctica como completada.

#include "mbed.h"

DigitalOut led1(PB_13, 1);
DigitalOut led2(PB_14, 1);
DigitalOut led3(PB_15, 1);

void led_on(DigitalOut &led) {
    led = 0;
}

void led_off(DigitalOut &led) {
    led = 1;
}

void all_off() {
    led_off(led1);
    led_off(led2);
    led_off(led3);
}

int main() {
    const auto step_delay = 500ms;
    const auto reset_delay = 1000ms;
    all_off();

    while (true) {
        led_on(led1);
        ThisThread::sleep_for(step_delay);

        led_on(led2);
        ThisThread::sleep_for(step_delay);

        led_on(led3);
        ThisThread::sleep_for(reset_delay);

        all_off();
        ThisThread::sleep_for(reset_delay);
    }
}

Registra por separado las dos versiones probadas. Como el código inicial mantiene encendidos los LED anteriores hasta que se ejecuta all_off(), la secuencia visible esperada es acumulativa: LED 1 encendido -> LED 1+2 encendidos -> LED 1+2+3 encendidos -> todos apagados.

Para la versión original de 500ms, registra:

- orden visible o patrón acumulativo que confirmaste en la cámara;
- si las posiciones de los LED coincidieron con el mapa led1/led2/led3;
- qué hizo que el patrón fuera fácil o difícil de verificar.

Para la versión con temporización cambiada, registra:

- el valor de retardo que probaste;
- si el orden visible o patrón acumulativo se mantuvo igual;
- si el nuevo ritmo hizo el patrón más fácil o más difícil de verificar;
- no distinguible en cámara solo si ralentizaste el patrón y aun así no pudiste confirmar el orden.

Elige una llamada auxiliar que cambie un LED. Nombra la línea, por ejemplo led_on(led2);, y explica qué cambio físico causó esa línea y cuándo ocurrió en la secuencia.

3

Crear tu propio patrón legible

13 min

Modifica el código para crear un patrón distinto que un compañero o compañera pueda describir correctamente. Mantén los retardos suficientemente largos para verlo.

Elige uno de estos patrones:

- Encendidos juntos y luego apagados uno a uno.
- Un LED se desplaza de izquierda a derecha y luego de derecha a izquierda.
- Dos destellos rápidos y después una pausa de un segundo.

Usa las funciones auxiliares para mantener el patrón legible. Por ejemplo, para encender solo led2, puedes escribir:

all_off();
led_on(led2);
ThisThread::sleep_for(500ms);

Para tu patrón final entregado, mantén cada estado visible de LED durante 250ms o más. Usa 500ms o 1000ms si la vista de cámara dificulta la verificación.

Antes de enviar, guarda, compila y carga tu patrón personalizado. Observa al menos un ciclo completo en la cámara. Si el patrón observado no coincide con tu descripción, revisa el código y prueba otra vez. Después describe tu patrón final con lenguaje claro, incluyendo el retardo elegido y por qué.

4

Enviar tu código

8 min

Adjunta tu main.cpp final guardado

Pulsa Comprobar archivos guardados, confirma que main.cpp contiene tu patrón personalizado final y luego pulsa Adjuntar código guardado. Después de adjuntar el código, pulsa Enviar entrega al final de la actividad.