hab am WE mein RPi, an welchem ein Taster angeschlossen ist, mal wieder ausgegraben und mir überlegt, wie in Python eigentlich "korrekt" gezählt wird. Also ich meine, wie sämtliche Flankenwechsel aufsummiert werden könnten. Dazu sind mir drei Arten eingefallen (ohne das wunderschöne "global")
mit einer Klasse:
Code: Alles auswählen
#!/usr/bin/env python
# coding: utf-8
from __future__ import print_function
from gpiozero import Button
import signal
class Counter(object):
count = 0
def __init__(self):
Counter.count += 1
def counting(self):
return self.count
def counting_sth():
print(Counter().count)
def main():
try:
button = Button(21)
button.when_pressed = counting_sth
signal.pause()
except KeyboardInterrupt:
pass
finally:
button.close()
if __name__ == '__main__':
main()
Code: Alles auswählen
#!/usr/bin/env python
# coding: utf-8
from __future__ import print_function
from gpiozero import Button
import signal
from itertools import count
def do_sth(my_counter):
print(counting_smth(my_counter))
def counting_smth(my_counter):
return my_counter.next()
def main():
try:
my_counter = count(1)
button = Button(21)
button.when_pressed = lambda: do_sth(my_counter)
signal.pause()
except KeyboardInterrupt:
pass
finally:
button.close()
if __name__ == '__main__':
main()
Code: Alles auswählen
#!/usr/bin/env python
# coding: utf-8
from __future__ import print_function
from gpiozero import Button
import signal
from functools import wraps
def counter(func):
@wraps(func)
def counting():
counting.count += 1
return func()
counting.count = 0
return counting
@counter
def counting_smth():
print('{}'.format(counting_smth.count))
def main():
try:
button = Button(21)
button.when_pressed = counting_smth
signal.pause()
except KeyboardInterrupt:
pass
finally:
button.close()
if __name__ == '__main__':
main()
- was wäre die empfehlenswerteste Methode?
- ist die Klasse so ok bzw, kann man diese verbessern bzw. mach das Verwenden einer Klasse hier überhaupt einen Sinn?
- wie müsste ich die Klasse abändern, wenn ich mehrere Taster/Pins ansprechen würde? (meine OOP Begabung ist limitiert)