Saltar a contenido

A04. Pulsador como interruptor

Enunciado

En esta actividad vamos a controlar el estado de un diodo LED mediante un botón pulsador pero de manera diferente a la actividad A03. Cuando presionemos el botón el LED se encenderá si estaba apagado o se apagará si estaba encendido. Es decir, la acción del pulsador ya no es momentánea ya que el LED va a permanecer encendido sin necesidad de estar acionanándolo de forma continua.

Contenidos de electrónica básica que se aconseja repasar:

Lista de componentes

  • - Placa pico explorer con Pi Pico
  • - 1 Cable USB A a USB micro que utilizaremos para programar y alimentar la Pi Pico
  • - 1 Diodo LED
  • - 1 Resistencia de 220R
  • - 2 Resistencia de 100K
  • - 1 pulsador
  • - Cables dupont

Esquema del circuito

El circuito que vamos a montar es el siguiente:

A04

Programa

Código

El código de la actividad es el siguiente:

from machine import Pin
import time

led = Pin(5, Pin.OUT)
pulsador = Pin(4, Pin.IN, Pin.PULL_UP)

def invertirGPIO():
    if led.value():
        led.value(0)
    else:
        led.value(1)

try:
    while True:
        if not pulsador.value():
            time.sleep_ms(20)
            if not pulsador.value():
                invertirGPIO()
                while not pulsador.value():
                    time.sleep_ms(20)
except:
    pass

El programa lo podemos descargar de:

Explicación

Veamos el funcionamiento del programa:

  • Importación de módulos y configuración de pines. Ver actividades anteriores.
  • Bucle infinito:

A04_bucle infinito
A04_bucle infinito

Cuando se detecta que se ha pulsado el botón (primer if), se genera un retardo de 20 ms para evitar el efecto rebote y, a continuación, se comprueba si el botón ha sido pulsado de nuevo (segundo if). En caso afirmativo, se ejecutará la sentencia condicional, en caso contrario no se ejecutará. Si el segundo if se cumple se invoca a la función invertirGPIO().

  • Función invertirGPIO():

A04_función invertir estado GPIO
A04_función invertir estado GPIO

Se evalúa el estado de led y si está a 1 lo pone a 0 o viceversa.