S&B Volcano vaporizer remote control with Pi Pico W
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

state_heat.py 1.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #!/usr/bin/env python
  2. import uasyncio as asyncio
  3. from poll import set_state
  4. class StateHeat:
  5. def __init__(self, lcd, state):
  6. self.lcd = lcd
  7. self.state = state
  8. self.lock = asyncio.Lock()
  9. def enter(self, val = None):
  10. self.value = val
  11. self.heater = asyncio.create_task(self.heat())
  12. self.done = False
  13. def exit(self):
  14. self.heater.cancel()
  15. if self.lock.locked():
  16. self.lock.release()
  17. return (self.value[0], self.value[1], 0)
  18. async def heat(self):
  19. print("Setting heater: {}".format(self.state))
  20. pump = None
  21. if self.state == False:
  22. pump = False
  23. await set_state(self.value[0], (self.state, pump))
  24. async with self.lock:
  25. self.done = True
  26. async def draw(self):
  27. self.lcd.fill(self.lcd.black)
  28. self.lcd.text("Volcano Remote Control App", 0, 0, self.lcd.green)
  29. self.lcd.text("Running Workflow - Heat {}".format(self.state), 0, 10, self.lcd.red)
  30. keys = self.lcd.buttons()
  31. if keys.once("y"):
  32. print("user abort")
  33. if self.state:
  34. async with self.lock:
  35. if self.done:
  36. return 4 # heat off
  37. else:
  38. return 5 # disconnect
  39. async with self.lock:
  40. if self.done:
  41. if self.state == False:
  42. return 5 # disconnect
  43. else:
  44. return 6 # wait for temperature
  45. else:
  46. if self.state == False:
  47. self.lcd.text("Turning heater off...", 0, 100, self.lcd.white)
  48. else:
  49. self.lcd.text("Turning heater on...", 0, 100, self.lcd.white)
  50. self.lcd.show()
  51. return -1 # stay in this state