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ń.)

20160214_231912.jpg

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)