from machine import Pin
from time import sleep
from collections import OrderedDict
buttons = [ Pin(i, Pin.IN) for i in range(4) ]
digits = [ Pin(i, Pin.OUT) for i in range(4, 8) ]
segments = [ Pin(i, Pin.OUT) for i in range(8, 15) ]
tableAnode = OrderedDict({
'0': (0, 0, 0, 0, 0, 0, 1),
'1': (1, 0, 0, 1, 1, 1, 1),
'2': (0, 0, 1, 0, 0, 1, 0),
'3': (0, 0, 0, 0, 1, 1, 0),
'4': (1, 0, 0, 1, 1, 0, 0),
'5': (0, 1, 0, 0, 1, 0, 0),
'6': (0, 1, 0, 0, 0, 0, 0),
'7': (0, 0, 0, 1, 1, 1, 1),
'8': (0, 0, 0, 0, 0, 0, 0),
'9': (0, 0, 0, 0, 1, 0, 0),
'A': (0, 0, 0, 1, 0, 0, 0),
'B': (1, 1, 0, 0, 0, 0, 0),
'C': (0, 1, 1, 0, 0, 0, 1),
'D': (1, 0, 0, 0, 0, 1, 0),
'E': (0, 1, 1, 0, 0, 0, 0),
'F': (0, 1, 1, 1, 0, 0, 0),
'*': (1, 0, 0, 1, 0, 0, 0),
' ': (1, 1, 1, 1, 1, 1, 1)
})
def setDigits(x):
displayCharacter(' ')
for i in range(4):
digits[i].value(x[i])
def turnOnDigit(x):
setDigits([0, 0, 0, 0])
digits[x].value(1)
def displayCharacter(x):
values = tableAnode.get(x)
for i in range(7):
segments[i].value(values[i])
def displayNumber(x):
x = [ chr((x // i) % 10 + ord('0')) for i in (1000, 100, 10, 1) ]
for i in range(4):
turnOnDigit(i)
displayCharacter(x[i])
sleep(0.01)
def checkButtons(x):
for i in range(4):
if buttons[i].value() != x[i]:
return False
return True
def testSystem():
setDigits([1, 1, 1, 1])
for key in tableAnode.keys():
displayCharacter(key)
sleep(0.5)
def startCounter():
counter = 0
released = True
auto = False
while True:
if checkButtons([0, 0, 0, 0]):
released = True
if not checkButtons([0, 0, 0, 0]) and released:
released = False
if checkButtons([1, 0, 0, 0]) and not auto:
counter = (counter + 1) % 10000
elif checkButtons([0, 1, 0, 0]) and not auto:
counter = (counter - 1) % 10000
elif checkButtons([0, 0, 1, 0]) and not auto:
counter = 0
elif checkButtons([0, 0, 0, 1]):
auto = not auto
if auto:
counter = (counter + 1) % 10000
for i in range(25):
displayNumber(counter)
displayNumber(counter)
testSystem()
#startCounter()