import machine
import time
segment_pins = [machine.Pin(i, machine.Pin.OUT) for i in range(2, 9)]
dp_pin = machine.Pin(16, machine.Pin.OUT)
digit_pins = [machine.Pin(i, machine.Pin.OUT) for i in range(9, 13)]
adc = machine.ADC(26)
segment_digits = {
'0': [1, 1, 1, 1, 1, 1, 0],
'1': [0, 1, 1, 0, 0, 0, 0],
'2': [1, 1, 0, 1, 1, 0, 1],
'3': [1, 1, 1, 1, 0, 0, 1],
'4': [0, 1, 1, 0, 0, 1, 1],
'5': [1, 0, 1, 1, 0, 1, 1],
'6': [1, 0, 1, 1, 1, 1, 1],
'7': [1, 1, 1, 0, 0, 0, 0],
'8': [1, 1, 1, 1, 1, 1, 1],
'9': [1, 1, 1, 1, 0, 1, 1],
' ': [0, 0, 0, 0, 0, 0, 0],
}
display_value = "0000"
current_digit = 0
def read_voltage_mv():
raw = adc.read_u16()
return int((raw / 65535) * 3300)
def update_display(timer):
global current_digit, display_value
for pin in digit_pins:
pin.value(0)
char = display_value[current_digit] if current_digit < len(display_value) else ' '
segments = segment_digits.get(char, segment_digits[' '])
for i in range(7):
segment_pins[i].value(1 - segments[i])
dp_pin.value(1 if current_digit == 0 else 0)
digit_pins[current_digit].value(1)
current_digit = (current_digit + 1) % 4
def update_sensor(timer):
global display_value
voltage = read_voltage_mv()
display_value = f"{voltage:04}"[-4:]
print("Voltage (mV):", voltage)
def setup():
for pin in segment_pins + digit_pins:
pin.value(0)
dp_pin.value(0)
display_timer = machine.Timer()
display_timer.init(freq=1000, mode=machine.Timer.PERIODIC, callback=update_display)
sensor_timer = machine.Timer()
sensor_timer.init(period=2000, mode=machine.Timer.PERIODIC, callback=update_sensor)
setup()