from machine import Pin
import onewire, ds18x20, time
# === Hőmérséklet szenzor ===
ds_pin = Pin(3)
ow = onewire.OneWire(ds_pin)
ds_sensor = ds18x20.DS18X20(ow)
roms = ds_sensor.scan()
if not roms:
raise Exception("Nincs szenzor!")
sensor_rom = roms[0]
# === LCD ===
class Lcd:
def __init__(self, rs, en, d4, d5, d6, d7):
self.rs = Pin(rs, Pin.OUT)
self.en = Pin(en, Pin.OUT)
self.data = [Pin(d, Pin.OUT) for d in [d4, d5, d6, d7]]
self.init()
def init(self):
for cmd in [0x33, 0x32, 0x28, 0x0C, 0x06, 0x01]:
self.cmd(cmd)
time.sleep_ms(5)
def pulse(self):
self.en.off()
time.sleep_us(1)
self.en.on()
time.sleep_us(1)
self.en.off()
time.sleep_ms(2)
def send(self, value, mode):
self.rs.value(mode)
for i in range(4):
self.data[i].value((value >> (4 + i)) & 1)
self.pulse()
for i in range(4):
self.data[i].value((value >> i) & 1)
self.pulse()
def cmd(self, cmd): self.send(cmd, 0)
def write(self, text):
for c in text: self.send(ord(c), 1)
def clear(self): self.cmd(0x01); time.sleep_ms(5)
def move_to(self, x, y): self.cmd(0x80 + x + 0x40 * y)
lcd = Lcd(12, 11, 10, 9, 8, 7)
# === Kimenetek és bemenetek ===
heater = Pin(16, Pin.OUT, value=1) # Fűtőelem alapból kikapcsolva (relé fordított)
start_btn = Pin(1, Pin.IN, Pin.PULL_UP)
stop_btn = Pin(2, Pin.IN, Pin.PULL_UP)
# === Funkciók ===
def read_temp():
ds_sensor.convert_temp()
time.sleep_ms(750)
return ds_sensor.read_temp(sensor_rom)
def display_temp(t):
lcd.move_to(0, 1)
lcd.write("T: {:.1f} C ".format(t))
def felfut60():
lcd.clear(); lcd.write("Felfutes 60C")
start = time.ticks_ms()
while True:
t = read_temp()
display_temp(t)
if t >= 60:
heater.on()
return True
if not stop_btn.value():
lcd.clear(); lcd.write("Veszleallas!")
heater.on()
return False
heater.off()
if time.ticks_diff(time.ticks_ms(), start) > 300000:
lcd.clear(); lcd.write("Timeout!")
heater.on()
return False
def tart60():
lcd.clear(); lcd.write("Tartas 30s")
start = time.ticks_ms()
heater.on()
while time.ticks_diff(time.ticks_ms(), start) < 30000:
t = read_temp()
display_temp(t)
if not stop_btn.value():
lcd.clear(); lcd.write("Veszleallas!")
heater.on()
return False
time.sleep(1)
return True
def hules():
lcd.clear(); lcd.write("Hules...")
heater.on()
while True:
t = read_temp()
display_temp(t)
if t < 30:
lcd.clear(); lcd.write("Kihult.")
return
if not stop_btn.value():
lcd.clear(); lcd.write("Megallitva!")
return
time.sleep(1)
# === Fő folyamat ===
def pasztor():
lcd.clear(); lcd.write("Indulas...")
if not felfut60(): return
if not tart60(): return
hules()
# === Főciklus ===
lcd.clear()
lcd.write("Keszenlet")
while True:
if not start_btn.value():
pasztor()
lcd.clear(); lcd.write("Keszenlet")
time.sleep_ms(100)
Loading
ds18b20
ds18b20
Folyamat Indítás
Vészleállítás
(tarsd hosszan)