Hallo Zusammen,
bin gerade positiv überrascht wie einfach es doch ist in Python sich zu einem bestehenden Modul eigene Funktionen zu erweitern.
Seit dem Umstieg von RPi.GPIO auf gpiozero hatte ich immer die Funktion event_detected() in gpiozero vermisst.
Dies habe ich mir nun selbst erweitert.
Zuzüglich noch die Funktion, dass man ermitteln kann wie lange ein Taster gedrückt worden ist. Dies funktioniert ja aktuell leider Modulseitig nicht ohne Fehler: siehe hier ab #10
Vielleicht kann es ja der ein oder andere von euch gebrauchen
example.py
Python
import buttonxtendgpiozero
import time
def main():
with buttonxtendgpiozero.Button(20) as taster:
taster.when_pressed = taster.when_pressed_
taster.when_released = taster.when_released_
while True:
if taster.check_status():
print("Taster wurde gedrückt")
elif taster.is_pressed:
print("Taster wird gehalten")
else:
print("Keine Betätigung")
if taster.event_time is not None:
print("Taster wurde gedrückt für {} Sekunden".format(taster.get_event_time()))
time.sleep(0.5)
if __name__ == "__main__":
main()
Alles anzeigen
buttonxtendgpiozero.py:
Python
import gpiozero
import time
class Button(gpiozero.Button):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self._event = False
self.event_time = None
self._pressed_at = None
def check_status(self):
status = self._event
# print("status: {}".format(status))
self.reset_event()
return status
def when_pressed_(self):
self.starte_event_time()
self.setze_event()
def when_released_(self):
self.stoppe_event_time()
def get_event_time(self):
event_time = self.event_time
self.event_time = None
return event_time
def starte_event_time(self):
self._pressed_at = time.time()
def stoppe_event_time(self):
self.event_time = time.time() - self._pressed_at
def setze_event(self):
self._event = True
def reset_event(self):
self._event = False
Alles anzeigen