Lección Teach
STM32 con Arduino API (2/4): secuencia y botones
El alumnado amplía un sketch Arduino para STM32 con varios LEDs y entrada de botón, y explica cómo el ritmo y el botón afectan la salida.
¿Primera vez que activas Teach? Puedes realizar una sesión de clase sin costo. El alumnado entra con un código de clase.
¿Primera vez en LabsLand? Crea tu cuenta de docente
Resultados de aprendizaje
Crear una secuencia de salidas usando una lista de pines.
Leer un botón activo en LOW y usarlo para cambiar el comportamiento.
Registrar dos estados de prueba y explicar la decisión del programa.
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.
Un botón activo en LOW
8 min
En este montaje, el botón que usaremos está conectado al pin PC5. Es un botón
activo en LOW: cuando está pulsado, digitalRead(PC5) devuelve LOW; cuando
no está pulsado, devuelve HIGH.
En la interfaz del laboratorio, usa el control llamado Botón 1 o B1.
Mantenlo pulsado mientras observas al menos una secuencia completa y suéltalo
antes de la prueba sin pulsar. Un clic rápido puede terminar antes de que el
programa lo lea.
Cuando el botón 1 está pulsado, ¿qué comparación representa la entrada activa en LOW?
Secuencia con modo rápido
27 min
El programa usa tres salidas RGB ya cableadas en el montaje remoto. setup()
configura el botón como entrada y cada pin RGB como salida. loop() lee el
botón una vez al comienzo de cada ciclo de tres colores, selecciona una espera
en milisegundos y enciende cada canal en orden. Una pulsación durante el ciclo
se aplica al ciclo siguiente, así que mantén B1 hasta que empiece ese ciclo. La
función apagarTodos() agrupa tres acciones repetidas bajo un nombre claro.
El botón fija el ritmo del ciclo RGB siguiente
El programa muestrea B1 al comienzo de loop(), elige un waitTime y usa ese
valor para los tres canales RGB de ese ciclo.
Inicia el laboratorio STM32 Arduino desde este bloque y abre la pestaña del
editor
main.inoen CodeIDE.Pega el programa inicial de abajo. Sustituye el TODO 1 por el nivel de
comparación que significa "pulsado" y el TODO 2 por una espera visiblemente
más rápida entre
100 msy300 ms. La espera normal es500 ms.Busca
TODOen el archivo; sustituye todos antes de compilar. Guarda,compila y espera un mensaje correcto. Después sube y espera la confirmación.
Prueba 1 - B1 suelto: observa una secuencia completa de tres colores y
rellena la fila sin pulsar.
Prueba 2 - B1 mantenido: mantén B1 pulsado durante una secuencia completa, suéltalo y
rellena la fila pulsado. Anota los tiempos reales en
ms.No edites la secuencia hasta completar las dos filas iniciales y la pregunta
de explicación que aparece justo debajo de la tabla.
#include <Arduino.h>
const int RGB_ROJO = PA8;
const int RGB_VERDE = PA9;
const int RGB_AZUL = PA10;
const int BOTON_1 = PC5; // Activo en LOW: pulsado == LOW
void apagarTodos() {
analogWrite(RGB_ROJO, 0);
analogWrite(RGB_VERDE, 0);
analogWrite(RGB_AZUL, 0);
}
void setup() {
pinMode(BOTON_1, INPUT);
pinMode(RGB_ROJO, OUTPUT);
pinMode(RGB_VERDE, OUTPUT);
pinMode(RGB_AZUL, OUTPUT);
}
void loop() {
bool pulsado = digitalRead(BOTON_1) == TODO_NIVEL_PULSADO; // TODO 1: nivel de comparación para un botón activo en LOW
int espera = 500;
if (pulsado) {
espera = TODO_ESPERA_RAPIDA_MS; // TODO 2: intervalo rápido visible, en ms
}
apagarTodos();
analogWrite(RGB_ROJO, 180);
delay(espera);
apagarTodos();
analogWrite(RGB_VERDE, 180);
delay(espera);
apagarTodos();
analogWrite(RGB_AZUL, 180);
delay(espera);
}
Rellena la tabla después de subir el programa y probar el botón. Usa solo dos
filas y deja vacías las demás si Teach muestra más:
- Fila 1: botón sin pulsar.
- Fila 2: botón pulsado.
- En Valor esperado de digitalRead, escribe HIGH o LOW según la lógica
activa en LOW.
- En Espera usada, anota en ms el valor que aplica el programa.
- En Explicación breve, conecta el estado del botón con la velocidad
observada.
| Estado del botón | Valor esperado de digitalRead | Espera usada ms | Secuencia observada | Explicación breve |
|---|---|---|---|---|
Explica cómo sabes que el botón cambió el comportamiento del programa. Usa tus dos filas como evidencia.
Modificar la secuencia después de las pruebas iniciales
10 min
Solo después de completar las dos filas iniciales, intercambia los bloques del
primer y último color para que la secuencia empiece en azul y termine en rojo.
No cambies ninguna espera. Guarda, compila, sube y repite ambos estados del
botón. Este reto separado comprueba que el orden y el ritmo controlado por el
botón son reglas distintas.
¿Qué dos bloques de código moviste? Indica el nuevo orden de colores y confirma,
con una observación de B1 suelto y otra de B1 mantenido, si la regla de velocidad
siguió funcionando.
Entregar tu código
10 min
Entrega tu main.ino final
Guarda main.ino antes de adjuntarlo. El snapshot debe mostrar la versión final,
el orden de colores cambiado y ningún token TODO.
¿Por qué un botón activo en LOW puede confundir al principio? Escribe una regla corta que te ayudaría a no equivocarte.
Convierte esta vista previa en una sesión de clase real
Activa LabsLand Teach para usar esta lección con tus estudiantes. La primera vez que actives Teach, podrás realizar una sesión de clase sin costo.
¿Primera vez en LabsLand? Crea tu cuenta de docente