Schönen Tag liebe Leser
und zwar habe ich folgendes Problem:
Ich habe mir letztens ein PiFacedigital 2 zugelegt und darauf ein Programm geschrieben. Leider bleibt das Programm ab einem gewissen Punkt einfach "stehen".
Vorher hatte ich das Programm auf dem GPIO layout geschrieben dort hat es funktioniert. Aber da das PiFace durch SPI gesteuert wird musste ich das Programm leicht umändern.
Das Programm ist ein Zähler.
Die Sollzahl kann man durch 2 Buttons im Label bestimmen und durch einen 3ten Button bestätigen.
Wenn man auf "Start" drückt zählt das programm die IST zahl hoch(durch einen Sensor) ist die IST Zahl gleich der SOLL Zahl hört das Zählen auf.
Durch einen Taster kann man dann die IST Zahl zurücksetzen und es fängt von vorne an.
Hier liegt auch das Problem wenn die IST Zahl gleich der SOLL Zahl ist und ich den Zähler Rücksetzen möchte funktioniert dies nicht (Das Programm bleibt stehen).
Hier mein Programm:
import pifacedigitalio as pf
from tkinter import *
import _thread
import time as time
BGCOLOR="#229"
#Import der Funktionen
pf.init()
pfc=pf.PiFaceDigital()
listener = pf.InputEventListener(chip=pfc)
listener = pf.InputEventListener(chip=pfc)
listener.activate()
global A
global B
global C
global D
global E
A=0
B=0
C=0
D=0
E=0
#Variable als globale variable definiert und den wert 0 zugeordnet
def Hochzaehlen():
global A
A=A+1
zaehlen="Sollwert "
zaehlen+=str(A)+"\n"
label.config(text=zaehlen)
#Wenn der Button Hochzählen gedrückt wird steigt die variable um den Wert von 1
#und gibt es im label aus
def Runterzaehlen():
global A
A=A-1
zaehlen1="Sollwert "
zaehlen1+=str(A)+"\n"
label.config(text=zaehlen1)
#Wenn der Button Runterzählen gedrückt wird singt die variable um den Wert von 1
#und gibt es im label aus
def Bestaetigen():
global A
global B
B=A
bestaetigen="Eingestellter Sollwert "
bestaetigen+=str(B)
label1.config(text=bestaetigen)
#Bestätigt die Sollzahl
def newThread():
_thread.start_new_thread(Start, ())
#Das Programm Start(def Start) wird parallel zum Hauptprommgramm aus geführt
def Start():
global C
global E
while C < B:
if pfc.input_pins[0].value > 0:
if pfc.input_pins[0].value == 0:
pf.digital_write(0, 0)
C=C+1
istZahl="Istwert "
istZahl+=str(C)
istZahl+="/"
istZahl+=str(B)
label2.config(text=istZahl)
#Die Lichtschranke zählt den Wert C hoch
if A == C:
print (A)
if pfc.input_pins[0].value > 0: <-- Hier tritt der Fehler ein
C=0
zahlRuecksetzen="Istwert "
zahlRuecksetzen+=str(C)
zahlRuecksetzen+="/"
zahlRuecksetzen+=str(B)
label2.config(text=zahlRuecksetzen)
#Rücksetzen des zählers wenn die Sollzahl = der Istzahl ist
#und der Taster gedrückt wird
#Vollbild
window = Tk()
#window.overrideredirect(True)
w = window.winfo_screenwidth()
h = window.winfo_screenheight()
window.geometry(str(w)+ "x" + str(h) + "+0+0")
frame=Frame(master=window, bg=BGCOLOR)
#Ausgabe im Label
label=Label(master=frame, bg=BGCOLOR, text="Sollwert 0",
font=("Courier", 25), fg="white")
label1=Label(master=frame, bg=BGCOLOR, text="Eingestellter Sollwert",
font=("Courier", 25), fg="white")
label2=Label(master=frame, bg=BGCOLOR, text="Istwert 0/" +str(A),
font=("Courier", 25), fg="white")
#Button wird erstellt
button = Button(master=frame, text="Hochzählen", bg=BGCOLOR,
fg="white", command=Hochzaehlen)
button1 = Button(master=frame, text="Runterzählen", bg=BGCOLOR,
fg="white", command=Runterzaehlen)
button2 = Button(master=frame, text="Bestätigen", bg=BGCOLOR,
fg="white", command=Bestaetigen)
button3 = Button(master=frame, text="Start", bg=BGCOLOR,
fg="white", command=newThread)
button4 = Button(master=frame, text="X", bg=BGCOLOR,
fg="white", command=window.destroy)
#Funktionen werden platziert
frame.pack(expand=True, fill=BOTH)
button1.pack(side=LEFT)
button.pack(side=LEFT)
button3.pack(side=RIGHT)
button2.pack(side=RIGHT)
label.pack(expand=True, fill=BOTH)
label1.pack(expand=True, fill=BOTH)
button4.place(x=1240, y=925)
label2.pack(expand=True, fill=BOTH)
window.mainloop()
Alles anzeigen
Ich bin erst seit 3 Wochen am Python Programmieren und habe deswegen nicht die Ehrfahrung
PS: Sorry für die Rechtschreibfehler und die unsaubere Programmierung