ich bin neu hier in diesem Forum weil ich mehr oder weniger ein Problem habe was mir keine Ruhe lässt.
Es klingt erstmal trivial aber ich habe schon alles mögliche versucht um dieses Problem zu lösen, leider ohne Erfolg.
Deshalb hoffe ich das mir ihr weiterhelfen könnt.
Es geht um folgendes:
Ich möchte nur zwei simple LEDs schalten bzw. daraus ein Blinklicht machen.
Folgendes zum Code
Ich hab am Raspberry Pi, zwei LEDs mit Vorwiderstand angeschlossen. Die Bedienung läuft über eine kleine Gui.
Wie man ganz unten am Code erkennen kann besteht die Gui aus mehreren Buttons "LED 1 an", "LED 2 an", "Blinklicht" und "Ausschalten".
LED 1 und 2 einschalten und ausschalten funktioniert wunderbar.
Das Blinklicht einzuschalten funktioniert auch.
(Ich musste das aber über einen Thread machen da mir sonst die Gui einfriert.
Multiprocessing hat warum auch immer nicht funktioniert, auch keine Fehlermeldung diesbezüglich.)
Ich bekomme aber das erzeugte Blinklicht nicht wieder ausgeschalten und daran häng ich jetzt schon mehrere Tage.
ich hab schon alles mögliche versucht über eine Break - Anweisung in der while - Schleife, über ein Alibi - Label das angesprochen wird mit der After.method(), den code umgeschrieben in OOP etc., aber nichts hat funktioniert.
Das einzige Mal als es funktionierte habe ich das mit der Shell simuliert.
Heißt ich hab überall im Code printbefehle (z.B. print(LED1 ein)) eingefügt und mir das über die Shell ausgeben lassen.
Mir ist durchaus bewusst das die sleep - Funktion in Verbindung mit einer Gui Gefahren bietet bzw. man das nicht macht.
Allerdings ist das die letzte Version, die wie oben beschrieben, funktioniert, jedenfalls bis zum Blinklicht ausschalten.
Schon einmal danke im Voraus für eure Hilfe.
Code: Alles auswählen
# LED Leuchten
import RPi.GPIO as GPIO
import time
import tkinter as tk
import threading
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.cleanup()
GPIO.setup(4, GPIO.OUT)
GPIO.setup(17, GPIO.OUT)
def LED1_on():
GPIO.output(4, 1)
def LED2_on():
GPIO.output(17, 1)
def Blinklicht():
while True:
GPIO.output(4, 1)
time.sleep(0.2)
GPIO.output(4, 0)
GPIO.output(17, 1)
time.sleep(0.2)
GPIO.output(17, 0)
def Blink():
blink = threading.Thread(target = Blinklicht)
blink.start()
def Ausschalten():
GPIO.output(4, 0)
GPIO.output(17, 0)
main_Fenster = tk.Tk()
main_Fenster.geometry("400x400")
main_Fenster.title("LED")
Button_LED1 = tk.Button(main_Fenster, text = "LED 1 an", bg = "yellow", font = ("Arial", 22),
command = LED1_on)
Button_LED1.pack(ipadx = 400, ipady = 30)
Button_LED2 = tk.Button(main_Fenster, text = "LED 2 an", bg = "orange", font = ("Arial", 22),
command = LED2_on)
Button_LED2.pack(ipadx = 400, ipady = 30)
Button_Blinklicht = tk.Button(main_Fenster, text = "Blinklicht", bg = "green",
font = ("Arial", 22), command = Blink)
Button_Blinklicht.pack(ipadx = 400, ipady = 30)
Button_Ausschalten = tk.Button(main_Fenster, text = "Ausschalten", bg = "red",
font = ("Arial", 22), command = Ausschalten)
Button_Ausschalten.pack(ipadx = 400, ipady = 30)
main_Fenster.mainloop()