import time
import math
from machine import Pin, ADC, PWM
time.sleep(0.1)
BETA = 3950
R1 = 10000
V_REF = 3.3
NTC_pin = machine.ADC(28)
NTC_ADC = 0
last_result = 0
timing = 0
pins = 8
numbers = 4
dig_start_pin = 8
digit1 = "11111111"
digit2 = "11111111"
digit3 = "11111111"
digit4 = "11111111"
pins_list = []
dig_list = []
digit_list_hex = [
"00000011", # 0
"10011111", # 1
"00100101", # 2
"00001101", # 3
"10011001", # 4
"01001001", # 5
"01000001", # 6
"00011111", # 7
"00000001", # 8
"00001001", # 9
0x08, # A
0x03, # B
0x46, # C
0x21, # D
0x06, # E
0x0E, # F
0x7F # Empty
]
def setup():
global buzzer_pin
buzzer_pin = PWM(Pin(13))
buzzer_pin.freq(300)
global pins
global pins_list
global dig_list
global dig_start_pin
for pin in range(pins):
assign = "pin" + str(pin)
assign = Pin(pin, Pin.OUT)
assign.value(1)
pins_list.append(assign)
for x in range(numbers):
dig = Pin(dig_start_pin, Pin.OUT)
dig_list.append(dig)
dig_start_pin = dig_start_pin + 1
print(dig_list)
def update():
global digit1
global digit2
global digit3
global digit4
global result
global pins_list
global dig_list
str_result = str(result)
if str_result[0] == "-":
return
counter = 1
digit1 = "11111111"
digit2 = "11111111"
digit3 = "11111111"
digit4 = "11111111"
while counter < 5:
dig1very = False
dig2very = False
dig3very = False
dig4very = False
if len(str_result) == 0:
return
ans = str_result[0]
ans_int = int(ans)
if counter == 1:
digit1 = digit_list_hex[ans_int]
dig1very = True
elif counter == 2:
digit2 = digit_list_hex[ans_int]
dig2very = True
elif counter == 3:
digit3 = digit_list_hex[ans_int]
dig3very = True
else:
digit4 = digit_list_hex[ans_int]
dig4very = True
if len(str_result) > 1:
if str_result[1] == ".":
str_result = str_result.replace(".", "")
if dig1very == True:
digit1 = digit1[:-1] + "0"
elif dig2very == True:
digit2 = digit2[:-1] + "0"
elif dig3very == True:
digit3 = digit3[:-1] + "0"
else:
digit4 = digit4[:-1] + "0"
counter = counter + 1
str_result = str_result[1:]
setup()
while True:
NTC_ADC = NTC_pin.read_u16()
voltage = (NTC_ADC / 65535) * V_REF
resistance = R1 / ((V_REF / voltage) - 1)
kelvin = 1 / (1 / 298.15 + 1 / BETA * math.log(resistance / 10000))
celsius = kelvin - 273.15
result = round(celsius, 1)
if result >= 39:
buzzer_pin.duty_u16(60000)
else:
buzzer_pin.duty_u16(0)
if result != last_result:
update()
last_result = result
digit_counter = 0
for dig_worker in dig_list:
if digit_counter == 0:
danx = digit1
elif digit_counter == 1:
danx = digit2
elif digit_counter == 2:
danx = digit3
else:
danx = digit4
dig_worker.value(1)
counter = 0
for pin_worker in pins_list:
state = int(danx[counter])
pin_worker.value(state)
counter = counter + 1
digit_counter = digit_counter + 1
time.sleep(0.03)
dig_worker.value(0)
for pin_worker in pins_list:
pin_worker.value(1)