# from machine import ADC, Pin, Timer, I2C
# from pico_i2c_lcd import I2cLcd
# # Initialize ADC for potentiometer
# pot = ADC(26)
# # LCD setup
# sda = Pin(0)
# scl = Pin(1)
# i2c = I2C(0, sda=sda, scl=scl, freq=400000)
# device = i2c.scan()
# i2caddr = device[0]
# lcd = I2cLcd(i2c, i2caddr, 2, 16)
# def update_gate(timer):
# value = pot.read_u16() # Read potentiometer value (0-65535)
# angle = (value / 65535) * 90 # Map to 0-90 degrees
# lcd.clear()
# lcd.putstr("Gate Angle:\n" + str(int(angle)) + " degrees")
# # Run the update function every 500ms
# timer = Timer()
# timer.init(period=500, mode=Timer.PERIODIC, callback=update_gate)
from machine import ADC, Pin, Timer, I2C
from pico_i2c_lcd import I2cLcd
import math
# LED setup
green_led = Pin(15, Pin.OUT)
yellow_led = Pin(14, Pin.OUT)
red_led1 = Pin(13, Pin.OUT)
red_led2 = Pin(12, Pin.OUT)
red_led3 = Pin(11, Pin.OUT)
# LCD setup
sda = Pin(0)
scl = Pin(1)
i2c = I2C(0, sda=sda, scl=scl, freq=400000)
device = i2c.scan()
i2caddr = device[0]
lcd = I2cLcd(i2c, i2caddr, 2, 16)
# Temperature Sensor Setup
adc = ADC(4)
beta = 3950 # Beta value
outside_safe_time = 0
def read_temperature():
reading = adc.read_u16()
resistance = 10000 / ((65535 / reading) - 1)
temp = 1 / ((math.log(resistance / 10000) / beta) + (1 / 298.15)) - 273.15
return temp
def monitor_temperature(timer):
global outside_safe_time
temp = read_temperature()
if 10 <= temp <= 33:
green_led.on()
yellow_led.off()
red_led1.off()
red_led2.off()
red_led3.off()
outside_safe_time = 0
else:
green_led.off()
yellow_led.on()
outside_safe_time += 1
if outside_safe_time > 5:
red_led1.on()
red_led2.on()
red_led3.on()
lcd.clear()
lcd.putstr("DANGER!")
# Run the monitoring function every 1000ms
timer = Timer()
timer.init(period=1000, mode=Timer.PERIODIC, callback=monitor_temperature)