import time
from machine import ADC, Pin, Timer
from math import log
buttons=[Pin(16+i,Pin.IN,Pin.PULL_UP) for i in range(2)]
digital_value=ADC(28)
digitals=ADC(27)
SEVEN_SEGMENT_START_PIN = 0
DISPLAY_COUNT = 4
DECIMAL_PRECISION = 3
digit_list_hex = [
0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x78,
0x00, 0x10, 0x08, 0x03, 0x46, 0x21, 0x06, 0x0E
]
values=[]
previous=0
segment_pins = []
display_select_pins = []
current_display_index = DISPLAY_COUNT - 1
display_timer = Timer()
update_timer = Timer()
button_state=None
DECIMAL_PRECISION2=None
def enable_display_timer():
display_timer.init(period=30, mode=Timer.PERIODIC, callback=scan_display)
def scan_display(timer_int):
global current_display_index, display_value
digit = int((voltage // pow(10, current_display_index))) % 10
display_digit(digit, current_display_index, current_display_index == DECIMAL_PRECISION or current_display_index == DECIMAL_PRECISION2 )
current_display_index = (current_display_index - 1)
if current_display_index < 0:
current_display_index = DISPLAY_COUNT -1
def display_digit(digit_value, digit_index, dp_enable=False):
for pin in display_select_pins:
pin.value(0)
mask = digit_list_hex[digit_value]
for i in range(7):
segment_pins[i].value((mask >> i) & 1)
segment_pins[7].value(1 if dp_enable == False else 0)
if digit_index == -1:
for pin in display_select_pins:
pin.value(1)
elif 0 <= digit_index < DISPLAY_COUNT:
display_select_pins[digit_index].value(1)
def read_analogue_voltage(Pin) :
global button_state,previous,voltage,values,DECIMAL_PRECISION2
if time.ticks_diff(time.ticks_ms(),previous)> 200:
previous = time.ticks_ms()
button_state = 1
if len(values)>16:
values=[]
digital=digital_value.read_u16()
digital2=digitals.read_u16()
if Pin ==buttons[0]:
voltage=((digital2/ 65535)*5)*1000
voltage1=((digital/ 65535)*5)*1000
print(f"the value of the voltage of temp sensor :{int(voltage)}mv")
print(f"the value of the voltage of potentiometer :{int(voltage1)}mv")
else:
BETA = 3950
voltage=int(( 1 / (log(1 / (65535. / digital - 1)) / BETA + 1.0 / 298.15) - 273.15)*100)
print(f"print temp in celsius:{voltage/100}")
if 99<voltage<999:
voltage=voltage*10
if voltage<0:
voltage=-voltage
DECIMAL_PRECISION2=0
else:
DECIMAL_PRECISION2=None
fun=[buttons[i].irq(trigger=machine.Pin.IRQ_FALLING, handler=read_analogue_voltage)for i in range(len(buttons))]
def setup():
for i in range(SEVEN_SEGMENT_START_PIN + 8, SEVEN_SEGMENT_START_PIN + 8 + DISPLAY_COUNT):
pin = Pin(i, Pin.OUT)
pin.value(0)
display_select_pins.append(pin)
for i in range(SEVEN_SEGMENT_START_PIN, SEVEN_SEGMENT_START_PIN + 8):
pin = Pin(i, Pin.OUT)
pin.value(1)
segment_pins.append(pin)
display_timer = machine.Timer()
enable_display_timer()
while True:
if button_state==1:
setup()
button_state=0
time.sleep(1)