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.
Resultados de aprendizaje
Controlar varios pines
DigitalOutde 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.
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
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()?
Ejecutar la secuencia guiada
26 min
Abre el laboratorio STM32 Mbed CodeIDE.
Abre
main.cpp.Reemplaza el archivo con el código siguiente.
Guarda, compila y carga.
Observa al menos tres ciclos completos y anota el orden de los LED y el ritmo.
Cambia
step_delayde500msa250mso1000ms.Guarda
main.cpp, compila, carga y compara si el nuevo patrón es más fácil o más difícil de verificar.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.
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é.
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.