Jestem początkujący i próbuję napisać w Pythonie i wxPythonie program Okienkowy do obsługi silnika Krokowego. To co do tej pory udało mi się zdziałać i znaleźć z sieci wstawiam poniżej.
Pierwszy z nich jest to program okienkowy, udało mi się stworzyć wygląd i to co chciałem w nim mieć lecz nie potrafię nadać buttionom funkcji.
Drugi program po prostu steruje silnikiem krokowym według moich wymagań.
Moje pytania i problemy.
- Nie potrafię nadać buttionom funkcji np. buttion >>>>> chciałbym by poruszał silnikiem w prawo
- Pole Kąt wartość z tego pola chciałbym by była przypisana pod pozycję kroki
Nie wiem jak to wszystko ze sobą połączyć
(Przepraszam za złe formułowanie moich pytań.)
Plik Nr.1 Graficzny
#!/usr/bin/python
# -*- coding: utf-8 -*-
import wx
class Example(wx.Frame):
def __init__(self, *args, **kw):
super(Example, self).__init__(*args, **kw)
self.InitUI()
def InitUI(self):
pnl = wx.Panel(self)
wx.StaticBox(pnl, label='Kąt', pos=(10, 5), size=(225, 70))
cbtn1 = wx.SpinCtrl(pnl, value='1', pos=(20, 13), size=(200, 65), min=1, max=360)
wx.StaticBox(pnl, label='Przerwa', pos=(240, 5), size=(230, 70))
cbtn2 = wx.SpinCtrl(pnl, value='1:', pos=(255, 13), size=(200, 65), min=1)
wx.StaticBox(pnl, label='Sterowanie Ręczne', pos=(10, 75), size=(460, 70))
cbtn4 = wx.Button(pnl, -1, label='<<<<<', pos=(15, 97), size=(222, 40))
cbtn5 = wx.Button(pnl, -1, label='>>>>>', pos=(241, 97), size=(224, 40))
cbtn3 = wx.Button(pnl, -1, label='Start', pos=(1, 230), size=(476, 50))
cbtn3.Bind(wx.EVT_BUTTON, self.OnOpen)
self.SetSize((480, 320))
self.SetTitle('wx.Button')
self.Centre()
self.Show(True)
def OnOpen(self, event):
import stepper
def main():
ex = wx.App()
Example(None)
ex.MainLoop()
if __name__ == '__main__':
main()
Plik Nr.2 Sterujący Silnikiem krokowym
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
enable_pin = 12
coil_A_1_pin = 17
coil_A_2_pin = 18
coil_B_1_pin = 21
coil_B_2_pin = 22
GPIO.setup(enable_pin, GPIO.OUT)
GPIO.setup(coil_A_1_pin, GPIO.OUT)
GPIO.setup(coil_A_2_pin, GPIO.OUT)
GPIO.setup(coil_B_1_pin, GPIO.OUT)
GPIO.setup(coil_B_2_pin, GPIO.OUT)
def prawo(przerwa, kroki):
for i in range(0, kroki):
setStep(1, 0, 0, 0)
time.sleep(przerwa)
setStep(0, 1, 0, 0)
time.sleep(przerwa)
setStep(0, 0, 1, 0)
time.sleep(przerwa)
setStep(0, 0, 0, 1)
time.sleep(przerwa)
def lewo(przerwa, kroki):
for i in range(0, kroki):
setStep(0, 0, 0, 1)
time.sleep(przerwa)
setStep(0, 0, 1, 0)
time.sleep(przerwa)
setStep(0, 1, 0, 0)
time.sleep(przerwa)
setStep(1, 0, 0, 0)
time.sleep(przerwa)
def setStep(w1, w2, w3, w4):
GPIO.output(coil_A_1_pin, w1)
GPIO.output(coil_A_2_pin, w2)
GPIO.output(coil_B_1_pin, w3)
GPIO.output(coil_B_2_pin, w4)
kroki = raw_input("Ile krokow Silnika? ")
przerwa = 5
sleep = raw_input("Przerwa miendzy sekwecjami? ")
licznik = 0
GPIO.output(enable_pin, 1)
while licznik < 512:
GPIO.output(enable_pin, 1)
prawo(int(przerwa) / 1000.0, int(kroki))
GPIO.output (enable_pin, 0)
setStep(0, 0, 0, 0)
time.sleep(int(sleep))
licznik += int(kroki)
print "%.f" % (licznik / 512.0 * 100)