Seite 1 von 1

einen Loop mit einem Button unterbrechen

Verfasst: Donnerstag 5. März 2020, 10:23
von marouensassi
ich versuche die laufende Schleife in dem ( FunktionTest()) mit dem Button Stop zu Unterbrechen aber Funktionniert nicht ich brauche eure Hilfe Danke ; )


Code: Alles auswählen

import RPi.GPIO as gpio
import time as t
from tkinter import*





gpio.setmode(gpio.BCM)

gpio.setwarnings(False)


                 #''' INPUT  definieren  '''



gpio.setup(25, gpio.IN, pull_up_down = gpio.PUD_UP)# SENSOR1
gpio.setup(12, gpio.IN, pull_up_down = gpio.PUD_OFF) # SENSOR2
gpio.setup(16, gpio.IN, pull_up_down = gpio.PUD_DOWN) #SET
gpio.setup(20, gpio.IN, pull_up_down = gpio.PUD_DOWN) # RESET
gpio.setup(21, gpio.IN, pull_up_down = gpio.PUD_DOWN) # NOT-AUS

                  #''' OUTPUT  definieren '''


gpioList = [13,6,5,22,27,17,4]
gpio.setup(19, gpio.OUT)
gpio.output(19, gpio.HIGH)
for i in gpioList :
    gpio.setup(i, gpio.OUT)
    gpio.output(i, gpio.HIGH)

global notaus
notaus = 0





def on_closing():
   
      
    window.destroy()





   
def FunktionStop () :
   global notaus
   notaus = 1
   statusbar["text"]= "Block"




   
def Restart () :
   global notaus
   notaus = 0
   print(notaus)
   statusbar["text"] ="Restart"
      





def FunktionTest ():
   global notaus
   x = 4
   
   statusbar["text"] ="it works"
   while notaus== 0 and  x > 0 and gpio.input(21) == 1 :

                      if gpio.input(12) == 0  :
                          print("detected1")
                          gpio.output(27, gpio.HIGH)
                          Sensor= 1

                      if gpio.input(25) == 0 and Sensor == 1:
                          print ("detected2")


                          Sensor = 0
                          x = x-1
                          print(x)





window = Tk()
window.title("GUI")

#Variable Declare



#outputs
statusbar = Label(window, text="auf start drücken", width=25,height =5, borderwidth=15 ,relief = SUNKEN)
statusbar.grid(row= 6, column = 2)
# variable to store input


b1=Button(window, text="Sensor-Test",command =FunktionTest)
b1.grid(row=2, column = 2, padx= (100,5), pady=5)

b2=Button(window, text="Startwischen ",command =Restart)
b2.grid(row=3, column = 2, padx= (100,5), pady=5)

b3=Button(window, text="STOP ",command =FunktionStop)
b3.grid(row=4, column = 2, padx= (100,5), pady=5)


window.protocol("WM_DELETE_WINDOW", on_closing)
window.mainloop()  

Re: einen Loop mit einem Button unterbrechen

Verfasst: Donnerstag 5. März 2020, 10:49
von __deets__
Und taeglich gruesst das Murmeltier. GUIs und Schleifen gehen nicht gut, und GPIOs und GUIs zu integrieren ist ein Thema, das dauernd wer will, aber niemand hinbekommt. Seufz.

Fuer dein konkretes Problem mit der while-Schleife (es gibt noch unglaublich viele andere Problem in deinem Programm, von Benamung ueber globaln Zustand bis hin zu wirklich komischen Leerzeilengebrauch) gibt es eine einfache Loesung: add_event_detect. Du solltest die Arbeit, die du da vollfuehrst, einfach in den (kurz zu haltenden!) Event-Callbacks durchfuehren. Damit laeuft das dann auch parallel zu deiner GUI.