Teach Lecciones con laboratorios remotos

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.

  • STM32 Nucleo (Arduino)
  • 55 min
  • Secundaria (15–18 años)
  • Español
  • Sistemas embebidos

¿Primera vez que activas Teach? Puedes realizar una sesión de clase sin costo. El alumnado entra con un código de clase.

Recorrido desde el botón B1 en PC5, pasando por digitalRead al comienzo de loop y la selección de waitTime para delay, hasta las salidas RGB PA8, PA9 y PA10.
STM32 Nucleo (Arduino)

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.

1

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?

2

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

Recorrido desde el botón B1 en PC5, pasando por digitalRead al comienzo de loop y la selección de waitTime para delay, hasta las salidas RGB PA8, PA9 y PA10.

El programa muestrea B1 al comienzo de loop(), elige un waitTime y usa ese
valor para los tres canales RGB de ese ciclo.

  1. Inicia el laboratorio STM32 Arduino desde este bloque y abre la pestaña del

  2. editor main.ino en CodeIDE.

  3. Pega el programa inicial de abajo. Sustituye el TODO 1 por el nivel de

  4. comparación que significa "pulsado" y el TODO 2 por una espera visiblemente

  5. más rápida entre 100 ms y 300 ms. La espera normal es 500 ms.

  6. Busca TODO en el archivo; sustituye todos antes de compilar. Guarda,

  7. compila y espera un mensaje correcto. Después sube y espera la confirmación.

  8. Prueba 1 - B1 suelto: observa una secuencia completa de tres colores y

  9. rellena la fila sin pulsar.

  10. Prueba 2 - B1 mantenido: mantén B1 pulsado durante una secuencia completa, suéltalo y

  11. rellena la fila pulsado. Anota los tiempos reales en ms.

  12. No edites la secuencia hasta completar las dos filas iniciales y la pregunta

  13. 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.

3

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.

4

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.