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.
¿Primera vez en LabsLand? Crea tu cuenta de docente
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 solo parpadeo demuestra que la placa se puede programar; un patrón temporizado de LED puede comunicar información, como una secuencia de arranque, un aviso o un código de estado. La idea importante en esta lección no es solo "encender LED"; es que el orden del código más los retardos se convierten en comportamiento visible del hardware.
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 salidas LED verdes usadas 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 se enciende el LED 1, después el LED 2 y después el LED 3, sin llamar a led_off() entre ellos, ¿qué aparece justo antes de all_off()?
Ejecutar la secuencia guiada
26 min
Planifica dos compilaciones y unos 20 minutos de laboratorio activo. La versión 1 usa orden de izquierda a derecha y 500ms; la versión 2 cambia solo el retardo de paso a 250ms o 1000ms. Mientras esperas en la cola, responde la pregunta sobre el patrón acumulativo, elige la segunda temporización y escribe el orden esperado.
El código inicial contiene exactamente cuatro marcadores que impiden compilar. Sustituye los TODO 1-4 antes de guardar o compilar. Busca TODO; un archivo listo para compilar no tiene coincidencias.
Abre el laboratorio STM32 Mbed CodeIDE.
Abre
main.cpp.Reemplaza el archivo con el código siguiente. Para la versión 1, usa
500msen el TODO 1 yled1,led2,led3en los TODO 2-4, en ese orden.Busca
TODO. Cuando no quede ninguno, guarda, compila la versión 1 y carga.Observa al menos tres ciclos completos y anota el orden de los LED y el ritmo.
Cambia solo
step_delayde500msa250mso1000ms.Guarda
main.cpp, compila la versión 2, carga y compara si la nueva temporizació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() {
// 1: sustituye el marcador temporal por 500ms para la versión 1.
const auto step_delay = TODO_STEP_DELAY;
const auto reset_delay = 1000ms;
all_off();
while (true) {
// 2-4: usa cada LED una vez para crear el orden izquierda-derecha.
led_on(TODO_FIRST_LED);
ThisThread::sleep_for(step_delay);
led_on(TODO_SECOND_LED);
ThisThread::sleep_for(step_delay);
led_on(TODO_THIRD_LED);
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.
Explicar tu temporización final
13 min
Mantén el orden izquierda-derecha de los TODO en el archivo final. El único cambio de la segunda compilación es la temporización: 250ms permite comparar un patrón más rápido; 1000ms ofrece una comparación más lenta y fácil de ver por cámara. Ambas opciones son válidas si coinciden con la evidencia.
Indica tu step_delay final en milisegundos. Explica por qué elegiste 250ms o 1000ms y si la evidencia de cámara respaldó esa elección.
Enviar tu código
8 min
Adjunta tu main.cpp final guardado
Pulsa Comprobar archivos guardados, confirma que main.cpp contiene el orden izquierda-derecha probado, tu temporización final y ningún TODO. Después pulsa Adjuntar código guardado y Enviar entrega.