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.Sube el código y verifica estos comportamientos uno por uno. Son exactamente lo que debe ocurrir si las conexiones y el código son correctos.
while y el pause(50). Asegúrate de que están en tu código exactamente como aparecen en el ejemplo.¿Ya funciona? Ahora modifica el proyecto. Cada reto introduce un concepto nuevo sobre control de tiempo y lógica.
basic.pause(10000) y luego apágalo con write(0) y pon encendido = false.for (let i = 0; i < 3; i++) que alterne write(0) y write(1) con pauses cortos antes del apagado final.input.onButtonPressed(Button.A, function()...). En Python, button_a.was_pressed(). No necesitas pines externos.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.Ahora que controlas la entrada y salida con un botón, hay muchas aplicaciones posibles.