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.
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.
Si el botón está pulsado y el programa ejecuta digitalRead(BOTON_1), ¿qué valor debe comparar: HIGH o LOW?
Secuencia con modo rápido
27 min
El programa usa tres salidas RGB de la placa. Primero las prepara en setup().
Después, en loop(), decide el tiempo de espera según el estado del botón.
Vista de montaje del laboratorio. En esta sesión no cambias cables: solo usas
pines ya disponibles desde el programa.
Abre el mismo laboratorio STM32 Arduino de la sesión anterior.
Abre
main.inoy copia el programa de referencia.Compila y sube el programa.
Observa la secuencia sin pulsar el botón.
Pulsa el botón 1 en la interfaz del laboratorio y observa de nuevo.
Cambia el valor rápido de
150ms a otro valor visible, compila, sube y prueba.
#include <Arduino.h>
const int LEDS[] = {PA8, PA9, PA10};
const int TOTAL_LEDS = 3;
const int BOTON_1 = PC5; // Activo en LOW: pulsado == LOW
void apagarTodos() {
for (int i = 0; i < TOTAL_LEDS; i++) {
analogWrite(LEDS[i], 0);
}
}
void setup() {
pinMode(BOTON_1, INPUT);
for (int i = 0; i < TOTAL_LEDS; i++) {
pinMode(LEDS[i], OUTPUT);
}
}
void loop() {
bool pulsado = digitalRead(BOTON_1) == LOW;
int espera = pulsado ? 150 : 500;
for (int i = 0; i < TOTAL_LEDS; i++) {
apagarTodos();
analogWrite(LEDS[i], 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 el valor que aplica el programa en ese caso.
- En Explicación breve, conecta el estado del botón con la velocidad
observada.
| Estado del botón | Valor esperado de digitalRead | Espera usada | 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 una regla
10 min
Elige una modificación pequeña:
- Cambiar la velocidad del modo rápido.
- Cambiar la velocidad del modo normal.
- Encender dos colores a la vez en una parte de la secuencia.
- Invertir la lógica para que el botón haga la secuencia más lenta.
¿Qué modificación hiciste? ¿Qué línea cambiaste y qué observaste después de compilar y subir?
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 con la lectura del botón y la secuencia modificada que quieres que revise tu profesor.
¿Por qué un botón activo en LOW puede confundir al principio? Escribe una regla corta que te ayudaría a no equivocarte.