from machine import Pin, Timer
from time import sleep
digits = [
[0, 1, 1, 1, 1, 1, 1], # 0
[0, 0, 0, 0, 1, 1, 0], # 1
[1, 0, 1, 1, 0, 1, 1], # 2
[1, 0, 0, 1, 1, 1, 1], # 3
[1, 1, 0, 0, 1, 1, 0], # 4
[1, 1, 0, 1, 1, 0, 1], # 5
[1, 1, 1, 1, 1, 0, 1], # 6
[0, 0, 0, 0, 1, 1, 1], # 7
[1, 1, 1, 1, 1, 1, 1], # 8
[1, 1, 0, 1, 1, 1, 1], # 9
[1, 1, 1, 0, 1, 1, 1], # A
[1, 1, 1, 1, 1, 0, 0], # B
[0, 1, 1, 1, 0, 0, 1], # C
[1, 0, 1, 1, 1, 1, 0], # D
[1, 1, 1, 1, 0, 0, 1], # E
[1, 1, 1, 0, 0, 0, 1], # F
]
display_value = 0
scanner = None
seg_pins = []
digit_pins = []
def disable_display_timer():
global scanner
scanner.deinit()
# Function to enable timer that triggers scanning 7 segment displays
def enable_display_timer():
global scanner
scanner.init(period=45, mode=machine.Timer.PERIODIC, callback=scan_display)
def read_value(useless):
global display_value
sleep(0.5)
display_value = input("Type a value from 0 to 99 (only integers are allowed): ")
return int(display_value)
# Function to handle scanning 7 segment displays
# Display the value stored in the display_value global variable
# on available 7-segment displays
def scan_display(timer_int):
global display_value, digit_pins
m = read_value(12)
for i in range(len(digit_pins)):
display_digit(int(m % 10), i, i==3)
seg_pins[7].off()
digit_pins[i].on()
m /= 10
# Function display the given value on the display with the specified index
# dp_enable specifies if the decimal pooint should be on or off
def display_digit(digit_value, digit_index, dp_enable=False):
global seg_pins, digit_pins
# Validity Check
if 0 > digit_value or digit_value > len(digits):
return
# Display Digit
val = digits[digit_value]
for i in range(7):
seg_pins[i].value(val[i])
# Position of Digit
if digit_index <= len(digit_pins):
digit_pins[digit_index].off()
else:
for i in range(4):
digit_pins[i].off()
# Decimal Point Check
if dp_enable:
seg_pins[7].on()
else:
seg_pins[7].off()
def setup():
sev_seg = 16
global display_value, digit_pins, seg_pins, scanner
sleep(0.02)
# PINS (GPIO or ADC)
a = machine.Pin(sev_seg, machine.Pin.OUT)
b = machine.Pin(sev_seg + 1, machine.Pin.OUT)
c = machine.Pin(sev_seg + 2, machine.Pin.OUT)
d = machine.Pin(sev_seg + 3, machine.Pin.OUT)
e = machine.Pin(sev_seg + 4, machine.Pin.OUT)
f = machine.Pin(sev_seg + 5, machine.Pin.OUT)
g = machine.Pin(sev_seg + 6, machine.Pin.OUT)
dp = machine.Pin(sev_seg + 10, machine.Pin.OUT)
dig1 = machine.Pin(sev_seg + 11, machine.Pin.OUT)
dig2 = machine.Pin(sev_seg + 12, machine.Pin.OUT)
# segments and digits of seven segment display
digit_pins = [dig2, dig1]
seg_pins = [g, f, e, d, c, b, a, dp]
# Timer setup
scanner = machine.Timer()
enable_display_timer()
if __name__ == '__main__':
setup()