# imports
from machine import Pin
from machine import ADC
import math
import time
#pins
digits_pins = [11, 10, 9, 8]
segement_pins = [0, 1, 2, 3, 4, 5, 6]
digit_selector = []
segement_selector = []
dp = Pin(7, Pin.OUT)
#numbers as 0s and 1s
num_segement_values = [
[1, 1, 1, 1 ,1, 1, 0], #0
[0, 1, 1, 0, 0, 0, 0], #1
[1, 1, 0, 1, 1, 0, 1], #2
[1, 1, 1, 1, 0, 0, 1], #3
[0, 1, 1, 0, 0, 1, 1], #4
[1, 0, 1, 1, 0, 1, 1], #5
[1, 0, 1, 1, 1, 1, 1], #6
[1, 1, 1, 0, 0, 0, 0], #7
[1, 1, 1, 1, 1, 1, 1], #8
[1, 1, 1, 1, 0, 1, 1] #9
]
#for loops to assign digits and segment pins as output pins
for i in digits_pins:
digit_selector.append(Pin(i, Pin.OUT))
for i in segement_pins:
segement_selector.append(Pin(i, Pin.OUT))
#function to display numbers
def num_display(num):
for i in range(7):
segement_selector[i].value(num_segement_values[num][i])
#functions to select the digit to be displayed
def all_digits_off():
dp.value(0)
digit_selector[0].value(1)
digit_selector[1].value(1)
digit_selector[2].value(1)
digit_selector[3].value(1)
def digit_1():
all_digits_off()
dp.value(1)
digit_selector[0].value(0)
digit_selector[1].value(1)
digit_selector[2].value(1)
digit_selector[3].value(1)
def digit_2():
all_digits_off()
digit_selector[0].value(1)
digit_selector[1].value(0)
digit_selector[2].value(1)
digit_selector[3].value(1)
def digit_3():
all_digits_off()
digit_selector[0].value(1)
digit_selector[1].value(1)
digit_selector[2].value(0)
digit_selector[3].value(1)
def digit_4():
all_digits_off()
digit_selector[0].value(1)
digit_selector[1].value(1)
digit_selector[2].value(1)
digit_selector[3].value(0)
#declare the button as output pin
button = Pin(16, Pin.IN, Pin.PULL_UP)
button_press = False
#button handler function
def handler(pin):
global button_press
button_press = True
button.irq(trigger= Pin.IRQ_FALLING, handler= handler)
volt_reader = ADC(26)
display_active = False
#main loop to read the voltage and display it
while True:
if button_press == True:
display_active = not display_active
button_press = False
volt_read = volt_reader.read_u16()
volt_val = float((volt_read/(2**16-1))*3.3)
four_digit_num = "{:.3f}".format(volt_val)
num_1 = int(four_digit_num[0])
num_2 = int(four_digit_num[2])
num_3 = int(four_digit_num[3])
num_4 = int(four_digit_num[4])
print(four_digit_num)
while display_active:
all_digits_off()
num_display(num_1)
digit_1()
all_digits_off()
time.sleep(0.01)
num_display(num_2)
digit_2()
all_digits_off()
time.sleep(0.01)
num_display(num_3)
digit_3()
all_digits_off()
time.sleep(0.01)
num_display(num_4)
digit_4()
all_digits_off()
time.sleep(0.01)
if button_press :
display_active = False