Lección Teach
STM32 Mbed CodeIDE (8/8): proyecto final de controlador integrado
El alumnado combina entrada analógica, botón de confirmación, salida RGB/LED de estado y evidencia por consola serie para construir un controlador STM32 integrado.
Resultados de aprendizaje
Combinar entrada analógica, entrada de botón, salida PWM RGB, un LED de estado y evidencia serie en un controlador.
Usar una matriz de pruebas para demostrar el comportamiento del controlador estado por estado.
Explicar cómo el código, la salida serie y la evidencia visible del laboratorio apoyan una afirmación sobre el controlador.
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.
Requisitos del controlador
12 min
El controlador usa un potenciómetro como nivel medido y un botón como control de reconocimiento.
Mapa de hardware usado por el controlador inicial:
- PC_1 es la entrada analógica de nivel, controlada por el deslizador Pot. pot2.
- PC_5 es la entrada del botón de reconocimiento, controlada por el botón B1.
- PA_8, PA_9 y PA_10 son los canales PWM RGB.
- PB_13 es el LED verde de estado activo en bajo.
Lee este mapa como un conjunto de objetos Mbed trabajando juntos: AnalogIn lee el nivel, DigitalIn lee el botón de reconocimiento, PwmOut controla los canales RGB y DigitalOut controla el LED de estado. El proyecto final consiste sobre todo en conectar esas piezas de la API en un controlador legible.
Mapa del controlador final
Este proyecto final solo usa funciones que practicaste en las lecciones anteriores.
El comportamiento requerido es:
- Nivel por debajo de 40%: salida RGB verde, LED de estado apagado, evidencia serie como
percent=25 level=SAFE ack=0.
- Nivel de 40% a 69%: salida RGB amarilla, LED de estado apagado, evidencia serie como
percent=55 level=WARNING ack=0.
- Nivel de 70% o más con el botón suelto: salida RGB roja, LED de estado
parpadeando, evidencia serie como percent=80 level=CRITICAL ack=0. Observa
al menos dos segundos antes de registrar este estado; cuéntalo como parpadeo
solo si el LED de estado se enciende y apaga repetidamente.
- Nivel de 70% o más con el botón pulsado: salida RGB azul, LED de estado apagado,
evidencia serie como percent=80 level=CRITICAL ack=1.
El botón de reconocimiento no hace que el nivel crítico sea seguro. Solo cambia el aviso visible para que la persona operadora pueda mostrar que ha visto la alarma.
Si el potenciómetro lee aproximadamente 80% y el botón de reconocimiento está pulsado, ¿qué deberían mostrar la salida RGB, el LED de estado y la línea serie?
Ejecutar el controlador inicial
30 min
Abre el laboratorio STM32 Mbed CodeIDE.
Abre
main.cpp.Reemplaza el archivo con el controlador siguiente.
Guarda, compila y carga.
Usa
Pot. pot2para fijar niveles seguro, aviso y crítico.En el nivel crítico, prueba el botón suelto y después pulsado.
Registra una fila por estado en la tabla de pruebas, incluyendo la línea serie completa.
Para el estado crítico no reconocido, observa el LED de estado al menos dos segundos antes de escribir la respuesta visible.
#include "mbed.h"
AnalogIn level_control(PC_1);
DigitalIn acknowledge_button(PC_5, PullUp);
PwmOut rgb_red(PA_8);
PwmOut rgb_green(PA_9);
PwmOut rgb_blue(PA_10);
DigitalOut status_led(PB_13, 1);
void status_on() {
status_led = 0;
}
void status_off() {
status_led = 1;
}
void set_rgb(float red, float green, float blue) {
rgb_red.write(red);
rgb_green.write(green);
rgb_blue.write(blue);
}
void show_safe() {
set_rgb(0.0f, 0.7f, 0.0f);
status_off();
}
void show_warning() {
set_rgb(0.7f, 0.5f, 0.0f);
status_off();
}
void show_critical(bool acknowledged) {
if (acknowledged) {
set_rgb(0.0f, 0.0f, 0.8f);
status_off();
} else {
set_rgb(0.9f, 0.0f, 0.0f);
status_led = !status_led.read();
}
}
int main() {
rgb_red.period_ms(2);
rgb_green.period_ms(2);
rgb_blue.period_ms(2);
printf("Integrated controller start\n");
while (true) {
float reading = level_control.read();
int percent = (int)(reading * 100.0f);
bool acknowledged = (acknowledge_button.read() == 0);
if (percent < 40) {
show_safe();
printf("percent=%d level=SAFE ack=%d\n",
percent,
acknowledged);
} else if (percent < 70) {
show_warning();
printf("percent=%d level=WARNING ack=%d\n",
percent,
acknowledged);
} else {
show_critical(acknowledged);
printf("percent=%d level=CRITICAL ack=%d\n",
percent,
acknowledged);
}
ThisThread::sleep_for(500ms);
}
}
Rellena la tabla mientras pruebas. Usa una fila para cada estado requerido: seguro, aviso, crítico con botón suelto y crítico con botón pulsado. En Entradas usadas, escribe tanto el porcentaje aproximado del potenciómetro como el estado del botón. En Evidencia serie, copia la línea impresa completa, por ejemplo percent=80 level=CRITICAL ack=1.
Para la fila crítico-suelto, escribe parpadeando solo después de ver que el LED de estado se enciende y apaga repetidamente durante al menos dos segundos.
Tabla de prueba del controlador de cuatro estados
| Caso de prueba | Entradas usadas | Respuesta esperada | Respuesta visible observada | Evidencia serie |
|---|---|---|---|---|
Elige tu fila de prueba más fuerte. Cita el estado de entrada y la línea serie de esa fila; después explica cómo la salida RGB y el LED de estado coincidieron con el requisito.
Mejorar el controlador
15 min
El controlador anterior es un punto de partida. Mejora una parte y vuelve a probarla.
Elige una mejora:
- Cambia el umbral de aviso o crítico y justifica el nuevo valor.
- Añade un parpadeo más lento o más rápido para el LED de estado crítico.
- Añade una línea serie que imprima mode=ACKNOWLEDGED cuando el botón esté pulsado
en el estado crítico.
- Añade un segundo patrón de crítico severo para valores por encima del 90%.
Describe la mejora que hiciste y cómo la probaste. ¿Qué requisito mejora? Si no pudiste implementarla, describe el bloqueo y la prueba exacta que ejecutarías a continuación.
Enviar tu código
8 min
Adjunta tu main.cpp final guardado
Pulsa Comprobar archivos guardados, confirma que main.cpp contiene el controlador final que probaste y luego pulsa Adjuntar código guardado. Después de adjuntar el código, pulsa Enviar entrega al final de la actividad.