ich habe einen Code geschrieben, der eine GUI für die Steuerung eines Schrittmotors mit Hilfe von Tkinter auf einem Raspberrypi erzeugt.
Das Programm benutzt die Software PWM - Modulation auf einem Raspberry pi.
Die Frequenz und die Pulsdicke der PWM werden mit Schiebereglern eingestellt, soweit funktioniert das.
Der Motor (die PWM) soll über einen Start - button gestartet und einen Stop- Button gestopt werden, um es vorwegzunehmen, der Start Button funktioniert nicht.
Wenn die PWM außerhalb der Klasse gestartet wird, startet sie, wenn icht den Start befehl aus der Funktion "start" aufrufe, geht es nicht. Nach mehreren Abenden des Probierens gebe ich das Problem ins Forum, in der Hoffnung, dass mir jemand weiterhelfen kann. Ich vermute, dass das Objekt PWM nicht richtig in die Klasse übergeben wird.
Gruß casavio
Code: Alles auswählen
#!/usr/bin/env python
import time
import RPi.GPIO as gpio # Library
gpio.setmode(gpio.BCM)
from Tkinter import *
pins = [7,8,23,10,25] #Pin 7 ist PWM, Restpins als OUT
for pin in pins:
gpio.setup(pin, gpio.OUT)
p = gpio.PWM ( 7 , 1)
p.start(0.0) #<--- steht hier nur zu Testzwecken
class MyClass (object) :
def __init__(self, dc=50.0, fq=0.0 ):
#def __init__(self, dc, fq ):
self.fq=fq
self.dc=dc
def show_values (self, dc, fq ):
print (dc.get(), fq.get())
def frequenz_modulation(self, fq):
p.ChangeFrequency(float(fq))
def pulsdicke (self, dc):
p.ChangeDutyCycle(float(dc))
def interrupt (self, channel):
global counter
counter = counter + 1
print "Anzahl Ticks " + str(counter)
self.ausgabefeld.config(text=str(counter))
def start (self, fq):
p.start(float(fq)) #<-- damit sollte es eigentlich starten
return p
def stop (self):
p.stop ( )
return p
def exit (self) :
gpio.cleanup()
master.destroy()
def pin8an (self) :
gpio.output(8, gpio.HIGH)
def pin8aus (self) :
gpio.output(8, gpio.LOW)
mein_objekt = MyClass(object) # Objekt wird erzeugt
master = Tk()
master.title ('StepperSteuerung')
master.geometry ('370x270')
# dc muss <= 100 sein !
dc = Scale(master, from_=0, to=100, tickinterval=50, label='Pulsdicke (%)', orient=HORIZONTAL,command=mein_objekt.pulsdicke)
dc.set(10.0)
dc.pack()
# fq muss > 0 sein !
fq = Scale(master, from_=1, to=401,tickinterval=200, label='Frequenz (Hz)', orient=HORIZONTAL,command=mein_objekt.frequenz_modulation)
fq.set(5.0)
fq.pack()
start_button = Button(master, text='Start', command=mein_objekt.start(5.0))
start_button.pack (side=LEFT, padx = 5, pady = 5)
stop_button = Button(master, text='Stop', command=mein_objekt.stop)
stop_button.pack (side=LEFT, padx = 5, pady = 5)
schalte_buttonan = Button(master, text='rechts', command=mein_objekt.pin8an)
schalte_buttonan.pack(side=LEFT, padx = 5, pady = 5)
schalte_buttonaus = Button(master, text='links', command=mein_objekt.pin8aus)
schalte_buttonaus.pack(side=LEFT, padx = 5, pady = 5)
quit_button = Button(master, text='Quit', command=mein_objekt.exit)
quit_button.pack (side=RIGHT, padx = 5, pady = 5)
master.mainloop()