LED.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import RPi.GPIO as GPIO
  2. from WTimer import WTimer
  3. class LED(object):
  4. OFF = 0
  5. STEADY = 1
  6. FLASHING = 2
  7. def __init__(self, gpio_port):
  8. self._gpio_port = gpio_port
  9. self._lighted = self.STEADY
  10. self._speed = 0
  11. self._flasher = None
  12. GPIO.setmode(GPIO.BOARD)
  13. GPIO.setup(self._gpio_port, GPIO.OUT)
  14. self.off()
  15. @property
  16. def gpio_port(self):
  17. return self._gpio_port
  18. @property
  19. def lighted(self):
  20. return self._lighted
  21. @property
  22. def lighted_real(self):
  23. return bool(GPIO.input(self.gpio_port))
  24. @property
  25. def speed(self):
  26. if self.lighted == self.FLASHING:
  27. return self._speed
  28. else:
  29. return None
  30. def _on(self):
  31. GPIO.output(self.gpio_port, True)
  32. def _flash(self):
  33. state = not self.lighted_real
  34. if state:
  35. self._on()
  36. else:
  37. self._off()
  38. def on(self, speed=0):
  39. self.off()
  40. if speed:
  41. self._lighted = self.FLASHING
  42. self._speed = speed
  43. self._flasher = WTimer(self._flash, self._speed)
  44. self._flasher.start()
  45. else:
  46. self._lighted = self.STEADY
  47. self._on()
  48. def _off(self):
  49. GPIO.output(self.gpio_port, False)
  50. def off(self):
  51. if not self._lighted:
  52. return
  53. if self.lighted == self.FLASHING:
  54. self._flasher.stop()
  55. self._flasher = None
  56. self._speed = 0
  57. self._lighted = self.OFF
  58. self._off()
  59. def cleanup():
  60. GPIO.cleanup()