1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| from time import time
from queue import Queue
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD) #on utilise la numérotation pin physique
button1=11
button2=12
GPIO.setup(button1,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.setup(button2,GPIO.IN,pull_up_down=GPIO.PUD_UP)
pile = Queue()
boutonEvent = lambda numBouton: lambda : pile.put((numBouton,time()))
passage0 = boutonEvent(0)
passage1 = boutonEvent(1)
# ~ remplacer ici channel par les valeurs adequates
GPIO.add_event_detect(11, GPIO.FALLING, callback=passage0, bouncetime=75)
GPIO.add_event_detect(12, GPIO.FALLING, callback=passage1, bouncetime=75)
def attentePassage(nbTours):
tours = [nbTours,nbTours]
while all(tours):
#jusqu'à ce qu'au moins une voiture atteigne nbTours
# remplacer par `while any(tours):` pour jusqu'à ce que les 2 voitures atteignent nbTours
voiture,temps = pile.get()
if tours[voiture]:
tours[voiture] -= 1
yield((voiture,nbTours-tours[voiture],temps))
top = time()
for vt,tr,tm in attentePassage(10):
print(f'voiture:{vt+1} tour:{tr} temps:{round(tm-top,4)}') |