"""
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Raspberry Pi Pico 7-Segment Display Counter (MicroPython)┃
┃ ┃
┃ A program to demonstrate the use of a 7-segment display ┃
┃ by implementing an ascending/descending hexadecimal ┃
┃ counter based on the state of an input switch. ┃
┃ ┃
┃ Copyright (c) 2023 Anderson Costa ┃
┃ GitHub: github.com/arcostasi ┃
┃ License: MIT ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
"""
from machine import Pin
from utime import sleep
# 7-segment display layout
# A
# ---
# F | G | B
# ---
# E | | C
# ---
# D
pins = [
Pin(2, Pin.OUT), # A
Pin(3, Pin.OUT), # B
Pin(4, Pin.OUT), # C
Pin(5, Pin.OUT), # D
Pin(6, Pin.OUT), # E
Pin(8, Pin.OUT), # F
Pin(7, Pin.OUT), # G
Pin(0, Pin.OUT) # DP (not connected)
]
# Common anode 7-segment display digit patterns
digits = [
[0, 0, 0, 0, 0, 0, 1, 1], # 0
[1, 0, 0, 1, 1, 1, 1, 1], # 1
[0, 0, 1, 0, 0, 1, 0, 1], # 2
[0, 0, 0, 0, 1, 1, 0, 1], # 3
[1, 0, 0, 1, 1, 0, 0, 1], # 4
[0, 1, 0, 0, 1, 0, 0, 1], # 5
[0, 1, 0, 0, 0, 0, 0, 1], # 6
[0, 0, 0, 1, 1, 1, 1, 1], # 7
[0, 0, 0, 0, 0, 0, 0, 1], # 8
[0, 0, 0, 1, 1, 0, 0, 1], # 9
]
# Define the GPIO pin for the buzzer
buzzer = Pin(15, Pin.OUT)
def reset():
"""Turns off all segments on the 7-segment display."""
for pin in pins:
pin.value(1)
reset()
while True:
# Descending counter
for i in range(len(digits) - 1, -1, -1):
for j in range(len(pins) - 1):
pins[j].value(digits[i][j])
sleep(1)
# Activate the buzzer when the counter reaches 0
if i == 0:
buzzer.value(1)
sleep(1)
buzzer.value(0)