from machine import Pin, ADC
import time
first_digit = 7
Dot = 11
Codes = [
0xC0,
0xF9,
0xA4,
0xB0,
0x99,
0x92,
0x82,
0xF8,
0x80,
0x90
]
Display = 0
def Read_voltage(pin):
global Display
Analog = ADC(pin).read_u16()
Display = round(3.3 * Analog / 65535 * 1000)
print(f"V: {Display} mV")
def Scan():
Current_value = Display
for i in range(3, -1, -1):
dp = (i == 0)
display_digit(int(Current_value % 10), i, dp)
time.sleep(1 / 60)
Pin(first_digit + i, Pin.OUT).off()
Pin(Dot, Pin.OUT).value(1)
Current_value //= 10
def display_digit(digit_value, digit_index, dp_enable=False):
for i in range(7):
Pin(i, Pin.OUT).value((Codes[digit_value] >> i) & 1)
Pin(first_digit + digit_index, Pin.OUT).on()
Pin(Dot, Pin.OUT).value(0 if dp_enable else 1)
old_time = time.ticks_add(time.ticks_ms(), -280)
new_voltage = False
def interrupt_callback(pin):
global old_time, new_voltage
if time.ticks_diff(time.ticks_ms(), old_time) > 200:
old_time = time.ticks_ms()
new_voltage = True
def main():
global new_voltage
for i in range(4):
Pin(first_digit + i, Pin.OUT).value(0)
Pin(Dot, Pin.OUT).value(1)
button = Pin(16, Pin.IN, Pin.PULL_DOWN)
button.irq(trigger=Pin.IRQ_FALLING, handler=interrupt_callback)
while True:
if new_voltage:
Read_voltage(26)
new_voltage = False
Scan()
if __name__ == '__main__':
main()