from machine import ADC, I2C, Pin, Timer
from pico_i2c_lcd import I2cLcd
from math import log
import utime
sda = Pin(0)
scl = Pin(1)
pin = Pin(2, Pin.OUT)
pin1 = Pin(26, Pin.OUT)
pin2 = Pin(21, Pin.OUT)
i2c = I2C(0, sda=sda, scl=scl, freq=400000)
device = i2c.scan()
i2caddr = device[0]
BETA = 3950
lcd = I2cLcd(i2c, i2caddr, 2, 16)
timer = Timer(-1)
overheat_time = 0
def fn(Timer):
global overheat_time
lcd.clear()
A0 = ADC(Pin(28))
val = A0.read_u16()
temp = (1 / (log(1 / (65535 / val - 1)) / BETA + (1 / 298.15))) - 273.15
if temp >= 10 and temp <= 33:
pin1.value(0)
pin.value(1)
pin2.value(0)
overheat_time = 0
else:
pin.value(0)
if overheat_time < 5:
pin1.value(1)
if temp > 33:
overheat_time += 1
if overheat_time > 5:
pin1.value(0)
pin2.toggle()
lcd.putstr("Danger!")
utime.sleep(2)
else:
pin2.value(0)
else:
overheat_time = 0
lcd.clear()
lcd.putstr(f"Temp: {temp:.2f} C")
timer.init(period=500, mode=Timer.PERIODIC, callback=fn)