def startProgramm(teamid): #Rennvorbereitung und Startsequenz activeCheckpoint = 1 #Checkpoint 1 ist der nächste Checkpoint nach dem Start x = time.time() #Nur ein Platzhalter vom richtigen Datentyp rslt.showResults(0, teamid, x) sound.playSound(-3) sound.playSpeech(0, teamid) lit.playStartSequence() starttime = time.time() while teamid != 0: #Schleife während des Rennens if cpl.checkpointReached( activeCheckpoint % 4 ): #Kontrolliert jeweils den nächsten Checkpoint nach dem zuletzt durchfahrenen, misst Zeiten, spielt Sounds und aktualisiert Zwischenergebnisse cpl.saveTime(starttime, activeCheckpoint % 4) _thread.start_new_thread(sound.playSound, (activeCheckpoint, teamid, starttime)) rslt.showResults(activeCheckpoint, teamid, starttime) activeCheckpoint += 1 if activeCheckpoint == 9: #beendet das Rennen, speichert und zeigt Ergebnisse, spielt entsprechende Sounds & Sprache und resettet Checkpoints cpl.prepareDataForDB(teamid) rslt.showResults(9, teamid, starttime) lit.raceEnd() time.sleep(6) sound.playSpeech(9, teamid, starttime) activeCheckpoint = 1 teamid = 0 cpl.resetAll()
def startProgramm(): identified = False print("running") while identified == False: #Loop solange kein Auto identifiziert ist teamid=1 #teamid, identified = qr.readQRCode() #Wenn der Scan funktioniert hat, wird die teamid und ein True-Flag zurückgegeben identified = True if identified == True: #Initialisiere Startsequenz sobald ein Auto erkannt wurde print("identified") #rslt.showResults(0, teamid, time.time()) #zeigt bisherige Ergebnisse des Teams an #sound.playSpeech(0, teamid) #erzählt infos zum Team fehlstart = lit.playStartSequence() #startet Ampel, Sounds und Fehlstartkontrolle if fehlstart: print("Fehlstart") break print("starttime") starttime = time.clock() #startet die Zeitmessung unabhängig davon, ob das Auto zu spät los fährt activeCheckpoint = 1 while identified == True: #Loop für Rennen, Messung etc. print("starting Race") if cpl.checkpointReached(activeCheckpoint % 4): cpl.saveTime(starttime, activeCheckpoint % 4) #speichert die LiveZeit vom aktuellen Checkpoint [0,1,2,3] _thread.start_new_thread(lit.startLightExpress,(activeCheckpoint)) #Ampel leuchtet, checkpointabhängig, läuft parallel _thread.start_new_thread(sound.playSound,(activeCheckpoint)) #Spielt parallel den Sound, checkpointabhängig [1...8] #_thread.start_new_thread(sound.playSpeech,(activeCheckpoint, teamid)) #spricht (parallel),checkpointabhängig [1...8],teamid? rslt.showResults(activeCheckpoint, teamid, starttime) #Zeigt Ergebnisse activeCheckpoint += 1 if activeCheckpoint == 9: #beendet das Rennen, speichert und zeigt Ergebnisse cpl.prepareDataForDB(teamID) #rechnet einzelne Zeiten aus und schreibt diese in die DB rslt.showResults(9, teamid) lit.raceEnd() print("Rennen beendet") break
import light as lit import RPi.GPIO as GPIO lit.raceEnd() GPIO.cleanup()
rslt.showResults(activeCheckpoint, teamid, starttime) activeCheckpoint += 1 if activeCheckpoint == 9: #beendet das Rennen, speichert und zeigt Ergebnisse, spielt entsprechende Sounds & Sprache und resettet Checkpoints cpl.prepareDataForDB(teamid) rslt.showResults(9, teamid, starttime) lit.raceEnd() time.sleep(6) sound.playSpeech(9, teamid, starttime) activeCheckpoint = 1 teamid = 0 cpl.resetAll() try: teamid = 0 while 1: teamid = qr.readQRCode( ) #Führt solange die QR-Code Funktion aus, bis diese ein Auto erkennt. Erfasst die TeamID if teamid != 0: startProgramm( teamid) #Wurde ein Auto erkannt, wird die Rennlogik ausgeführt time.sleep( 8 ) #verhindert Probleme,wenn in zwei Threads SOunds abgespielt werden. Der Pi hat keine Mischfunktion und kann immer nur in einem Thread Sound ausgeben. sound.playSound( -4) #signalisiert Bereitschaft zum erneuten Rennstart except KeyboardInterrupt: #Manueller Abbruch über die Konsole print("Programm aborted") lit.raceEnd() #schaltet die LEDs aus und deinitialisiert diese cpl.GPIO.cleanup() #resettet die GPIOs und gibt diese wieder frei pass