ich möchte mithilfe eines Raspberry ein Buzzerspiel mit grafischer Benutzeroberfläche entwickeln.
Ich habe es schon ohne GUI probiert, dort klappt es ohne Progleme. Einige IF bedingungen und Fertig.
Nun möchte ich einen Schritt weiter gehen, und habe ein Modul gebaut, mit eingebautem Touchscreen und der möglichkeit über XLR Anschlüsse einige Buzzer anzuschließen.
Es soll über den Touchscreen die Spielernamen abfragen, und den Buzzern zuordnen und wer zuerst Buzzert soll im Display angezeigt werden.
Nun zu meinem Problem:
Wenn ich den Spielernamen eingegeben habe und den start Button der GUI drücke läuft das Programm welches die Buzzer abfragt auch ohne Probleme. Sobald ein Buzzer gedrückt wird. bleibt das Programm in der Abfrageschleife in Zeile 71 hngen, trotzdem die variable programm welches die Schleife starten und beenden soll auf false steht.
Ich habe absolut keine Ahnung woran das liegen könnte und hoffe ihr könnt mir weiterhelfen.
Hier der Code:
Code: Alles auswählen
from tkinter import * #TKinter Modul zur erstellung der GUI Importieren
import RPi.GPIO as gpio #GPIO Pins des Raspi laden
import time #Time Modul sollte klar sein ;-)
gpio.setmode(gpio.BOARD) #GPIO Modus BOARD = GPIO Pin Nummerierung wie auf dem Raspi
gpio.setwarnings(False) #Nervige Fehlermeldungen ausblenden
#Ein und Ausgänge definieren
LED1 = 29
LED2 = 31
LED3 = 33
LED4 = 37
p1 = 7
p2 = 11
p3 = 13
p4 = 15
reset = 12
global programm #Hilfsvariable um die Programmabfrage zu starten
programm = bool()
global player1_pressed
player1_pressed = bool()
global player2_pressed
player2_pressed = bool()
global player3_pressed
player3_pressed = bool()
global player4_pressed
player4_pressed = bool()
gpio.setup(reset,gpio.IN, pull_up_down=gpio.PUD_DOWN)
gpio.setup(p1,gpio.IN, pull_up_down=gpio.PUD_DOWN)
gpio.setup(p2,gpio.IN, pull_up_down=gpio.PUD_DOWN)
gpio.setup(p3,gpio.IN, pull_up_down=gpio.PUD_DOWN)
gpio.setup(p4,gpio.IN, pull_up_down=gpio.PUD_DOWN)
gpio.setup(LED1,gpio.OUT)
gpio.setup(LED2,gpio.OUT)
gpio.setup(LED3,gpio.OUT)
gpio.setup(LED4,gpio.OUT)
#GUI anlegen
fenster = Tk()
fenster.title("Buzzman")
Textbox1 = Label(text="Spielernamen eingeben:")
Textbox1.pack()
#Spielernamen abfragen
Player1 = Entry(fenster)
Player1.pack()
Player2 = Entry(fenster)
Player2.pack()
Player3 = Entry(fenster)
Player3.pack()
Player4 = Entry(fenster)
Player4.pack()
def start():
global programm
programm = True
global player1_pressed
global player2_pressed
global player3_pressed
global player4_pressed
while(programm == True):
#Solbald ein Schalter gedrückt wurde und die entsprechende LED leuchtet sollen die anderen Schalter keine Auswirkung mehr auf die LEDs haben)
#Abfrage Welche Schalter gefdckt wurde
if (gpio.input(p1) ==1) and (gpio.input(p2) ==0)and(gpio.input(p3) ==0) and (gpio.input(p4) ==0):
player1_pressed = True
#Abfrage Welche Schalter gedückt wurde
if (gpio.input(p1) ==0) and (gpio.input(p2) ==1)and(gpio.input(p3) ==0) and (gpio.input(p4) ==0):
player2_pressed = True
#Abfrage Welche Schalter gedückt wurde
if (gpio.input(p1) ==0) and (gpio.input(p2) ==0)and(gpio.input(p3) ==1) and (gpio.input(p4) ==0):
player3_pressed = True
#Abfrage Welche Schalter gedückt wurde
if (gpio.input(p1) ==0) and (gpio.input(p2) ==0)and(gpio.input(p3) ==0) and (gpio.input(p4) ==1):
player3_pressed = True
#Beenden der Abfrageschleife, sobald ein Button gedrückt wurde
if (player1_pressed == True) or (player3_pressed == True) or (player3_pressed ==True) or (player4_pressed ==True):
programm = False
#LEDs und Variablen zurücksetzen
if (gpio.input(reset) ==1):
gpio.output(LED1, 0)
gpio.output(LED2, 0)
gpio.output(LED3, 0)
gpio.output(LED4, 0)
player1_pressed = False
player2_pressed = False
player3_pressed = False
player4_pressed = False
Start = Button(fenster, text="Start", command=start)
Start.pack()
#Abfrage zum testen
while(player1_pressed == True):
print(player1.get())
mainloop()