Raspberry Pi Pico
Buttons & LEDs

This project puts together some pushbuttons and some LEDs. The idea is to have an LED light up when its corresponding button is pressed. I am using these nice LED buttons but you can achieve a similar effect by using separate LEDs and pushbuttons.

Pico Circuit

This Fritzing shows how you might set this up with the separate components.

Pico Circuit

When programming the solution, I used binary values for storing the states of the buttons and wrote a procedure to set the LEDs using the same binary value. This makes the LEDs light up when the button is pressed.

import board 
from time import sleep 
from digitalio import DigitalInOut, Pull, Direction 

# function to read buttons into a binary pattern, 1 for pressed 
def read_btns(btn_list): 
    result = 0 
    for i, b in enumerate(btn_list): 
        result +=  (b.value^1)<<i 
    return result 

# tells if a button is pressed 
def pressed(pattern, b): 
    return pattern>>b & 1 

# sets leds based on a binary value 
def set_leds(led_list, pattern): 
    for i, l in enumerate(led_list): 
        l.value = pattern >> i & 1 

# set up button pins 
btn_pins = [board.GP2, board.GP3, board.GP4, board.GP5] 
btns = [DigitalInOut(p) for p in btn_pins] 
# set up as buttons 
for b in btns: 
    b.switch_to_input(pull = Pull.UP) 

# set up LED pins 
led_pins = [board.GP6, board.GP7, board.GP8, board.GP9] 
leds = [DigitalInOut(p) for p in led_pins] 
# set direction 
for l in leds: 
    l.direction = Direction.OUTPUT 
 
previous = 0 
while True: 
    reading = read_btns(btns) 
    set_leds(leds, reading) 
    if reading!=previous: 
        if pressed(reading, 0): 
            print("Button 0 was pressed.") 
        elif pressed(reading,1): 
            print("Button 1 was pressed.") 
        elif pressed(reading,2): 
            print("Button 2 was pressed.") 
        elif pressed(reading,3): 
            print("Button 3 was pressed.") 
        else: 
            sleep(0.1) 
    previous = reading 
    sleep(0.01)