ich bin gerade dabei ein kleines Programm zu schreiben um einen Schiebetisch an acht verschiedene Positionen zu fahren. Dazu habe ich einen Raspberry, Touchdisplay und dem SilentStepStick Schrittmotortreiber.
Über Tkinter habe ich kleine Oberfläche erstellt, mit der über acht Buttons die verschiedenen Positionen angefahren werden sollen. Soweit so gut
Die Berechnung und Ausgabe der Werte zur Kontrolle klappt soweit, aber das geht doch auch sicher schlanker. Ich möchte die Berechnung, die ja immer gleich ist nicht jedes mal neu aufrufen.
Die Ansteuerung des SilentStepSticks über die GPIOs wird dann später implementiert.
Eigentlich möchte über die Buttons 1-8 die Variable Ziel auf das jeweilige Gleis setzen und anschließend den Fahrweg berechnen und an den Schrittmotortreiber übergeben. Dazu müsste die Berechnung doch "ausgelagert werden", aber ich stehe auf dem Schlauch wie ich das hinbekomme :K
Code: Alles auswählen
from tkinter import*
from gleise import*
UMKEHR = -100 #Umkehrspiel im Getriebe
ISTPOSITION = 0 #Setze ISTPOSITION auf null nach Referenzfahrt
def ziel_g1():
global ZIEL
global ISTPOSITION
ZIEL = Gleis1
FAHRWEG = ZIEL - ISTPOSITION
if FAHRWEG>0:
FAHRWEG = FAHRWEG
ISTPOSITION = ZIEL
print("CW", FAHRWEG, "neue Position = ", ISTPOSITION)
elif FAHRWEG<0:
FAHRWEG = FAHRWEG + UMKEHR
ISTPOSITION = ZIEL
print("CCW", FAHRWEG, "neue Postiion = ", ISTPOSITION)
elif FAHRWEG==0:
FAHRWEG = 0
print("BIN AUF POSITION")
def ziel_g2():
global ZIEL
global ISTPOSITION
ZIEL = Gleis2
FAHRWEG = ZIEL - ISTPOSITION
if FAHRWEG>0:
FAHRWEG = FAHRWEG
ISTPOSITION = ZIEL
print("CW", FAHRWEG, "neue Position = ", ISTPOSITION)
elif FAHRWEG<0:
FAHRWEG = FAHRWEG + UMKEHR
ISTPOSITION = ZIEL
print("CCW", FAHRWEG, "neue Postiion = ", ISTPOSITION)
elif FAHRWEG==0:
FAHRWEG = 0
print("BIN AUF POSITION")
def ziel_g3():
ZIEL = Gleis3
def ziel_g4():
ZIEL = Gleis4
def ziel_g5():
ZIEL = Gleis5
def ziel_g6():
ZIEL = Gleis6
def ziel_g7():
ZIEL = Gleis7
def ziel_g8():
ZIEL = Gleis8
#Fenster, Buttons und Label deklarieren
GUI = Tk()
GUI.title("Schiebebahn")
GUI.geometry("320x240")
#GUI.overrideredirect(True)
#GUI.geometry("{0}x{1}+0+0".format(GUI.winfo_screenwidth(), GUI.winfo_screenheight()))
label = Label(GUI, text="(c) by Nico Engel V1.0")
EXIT = Button(GUI, text ="EXIT", command=GUI.quit)
G1 = Button(GUI, text="Gleis 1", command=ziel_g1)
G2 = Button(GUI, text="Gleis 2", command=ziel_g2)
G3 = Button(GUI, text="Gleis 3", command=ziel_g3)
G4 = Button(GUI, text="Gleis 4", command=ziel_g4)
G5 = Button(GUI, text="Gleis 5", command=ziel_g5)
G6 = Button(GUI, text="Gleis 6", command=ziel_g6)
G7 = Button(GUI, text="Gleis 7", command=ziel_g7)
G8 = Button(GUI, text="Gleis 8", command=ziel_g8)
#Butons und Label platzieren
label.pack()
label.place(x=30, y=210)
EXIT.pack()
EXIT.place(height=20, width=40, x=250, y=210)
G1.pack()
G1.place(height=40, width=110, x=30, y=20)
G2.pack()
G2.place(height=40, width=110, x=180, y=20)
G3.pack()
G3.place(height=40, width=110, x=30, y=70)
G4.pack()
G4.place(height=40, width=110, x=180, y=70)
G5.pack()
G5.place(height=40, width=110, x=30, y=120)
G6.pack()
G6.place(height=40, width=110, x=180, y=120)
G7.pack()
G7.place(height=40, width=110, x=30, y=170)
G8.pack()
G8.place(height=40, width=110, x=180, y=170)
GUI.mainloop()
Code: Alles auswählen
#Hier werden die Positionen der einzelnen Gleise angepasst.
#1000 STEPS entsprechen 1mm
Gleis1 = 1000 #Position Gleis 1 in STEPS
Gleis2 = 2000 #Position Gleis 2 in STEPS
Gleis3 = 3000 #Position Gleis 3 in STEPS
Gleis4 = 4000 #Position Gleis 4 in STEPS
Gleis5 = 5000 #Position Gleis 5 in STEPS
Gleis6 = 6000 #Position Gleis 6 in STEPS
Gleis7 = 7000 #Position Gleis 7 in STEPS
Gleis8 = 8000 #Position Gleis 8 in STEPS