# My first MicroPython example of a 7-segment
# ascending/descending hexadecimal counter
# by Anderson Costa, created on 05.06.2021
from machine import Pin
from utime import sleep
# 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)
]
digits = [
Pin(9, Pin.OUT),
Pin(10, Pin.OUT)
]
# Common anode 7 segment
digitDefns = [
[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
[0, 0, 0, 1, 0, 0, 0, 1], # a
[1, 1, 0, 0, 0, 0, 0, 1], # b
[0, 1, 1, 0, 0, 0, 1, 1], # C
[1, 0, 0, 0, 0, 1, 0, 1], # d
[0, 1, 1, 0, 0, 0, 0, 1], # E
[0, 1, 1, 1, 0, 0, 0, 1], # F
]
numDigits = len(digits)
numDigitDefns = len(digitDefns)
def reset():
for pin in pins:
pin.value(1)
for pin in digits:
pin.value(1)
reset()
switch = Pin(11, Pin.IN)
while False:
pins[0].value(0)
digits[0].value(1)
pins[1].value(1)
digits[1].value(0)
while False:
for j in range(len(pins) - 1):
pins[j].value(digitDefns[0][j])
for pin in digits:
pin.value(1)
while True:
if switch.value() == 1:
for i in range(numDigitDefns):
if switch.value() == 0:
break;
for j in range(len(pins) - 1):
pins[j].value(digitDefns[i][j])
digits[i%2].value(1)
digits[(i+1)%2].value(0)
sleep(0.5)
else:
for i in range(numDigitDefns - 1, -1, -1):
if switch.value() == 1:
break;
for j in range(len(pins)):
pins[j].value(digitDefns[i][j])
sleep(0.5)