Controla un LED con un pulsador externo. Aprende a leer una entrada digital y usa una variable booleana para hacer un interruptor real — igual que el interruptor de la luz de tu habitación.
!encendido) — si era true pasa a false, y viceversa.Reúne estos componentes antes de empezar. Haz clic en el nombre para ver la guía de cada componente.
Atención: el pulsador va en P0 (entrada/lectura) y el LED en P1 (salida/escritura). No los confundas.
| Componente | Pin shield | Cable recomendado |
|---|---|---|
| Pulsador — Señal | P0 | Azul |
| Pulsador — Alimentación | V (3.3V) | Rojo |
| Pulsador — Tierra | G (GND) | Negro |
| LED Verde — Señal | P1 | Verde |
| LED Verde — Alimentación | V (3.3V) | Rojo |
| LED Verde — Tierra | G (GND) | Negro |
Este código introduce un concepto nuevo: la variable booleana y la anti-rebote (debounce). Lee los comentarios con atención.
// Lámpara con botón tipo interruptor // Cada vez que pulsas el botón, la lámpara cambia de estado let encendido = false // Variable booleana: estado de la lámpara basic.forever(function () { if (pins.digitalReadPin(DigitalPin.P0) == 1) { // Botón pulsado: cambiar estado (toggle) encendido = !(encendido) if (encendido) { pins.digitalWritePin(DigitalPin.P1, 1) // LED ON basic.showIcon(IconNames.Happy) } else { pins.digitalWritePin(DigitalPin.P1, 0) // LED OFF basic.showIcon(IconNames.Sad) } // Esperar a que se suelte el botón (evita cambios múltiples) while (pins.digitalReadPin(DigitalPin.P0) == 1) { basic.pause(10) } basic.pause(50) // Anti-rebote: ignora vibraciones del botón } })
! invierte un booleano. Si encendido era false, se convierte en true. Si era true, se convierte en false. Es el "toggle" o interruptor.while espera a que sueltes el botón, y el pause(50) ignora el "rebote" mecánico del contacto.from microbit import * encendido = False # Variable booleana: estado de la lámpara while True: if pin0.read_digital() == 1: # Botón pulsado: cambiar estado (toggle) encendido = not encendido if encendido: pin1.write_digital(1) # LED ON display.show(Image.HAPPY) else: pin1.write_digital(0) # LED OFF display.show(Image.SAD) # Esperar a que se suelte el botón while pin0.read_digital() == 1: sleep(10) sleep(50) # Anti-rebote
True y False. Esta variable va FUERA del while True para que persista entre iteraciones del bucle.!(encendido) de JavaScript. Ambos hacen exactamente lo mismo.Los pulsadores son los componentes que más confusión generan. Aquí están los errores más comunes y cómo resolverlos.
basic.pause(50) después. Sin esto, el bucle forever lo lee decenas de veces por segundo.let encendido = false debe estar antes del bloque forever, en el nivel superior del código.