Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

RasPiでステッピングモーターを動かす その5: python標準ライブラリtkinterでJOG機能めいたものを実装

shuzo-kino.hateblo.jp

ステッピングモーターでやった事例の続き。
今度は、いわゆるJOG機能……的なものを実装してみます。
JOG機能は機構の組付けチェックなどに便利です。
本来はボタン押しっぱなしで動いているべきなんですが、今回は私のtkに対する知識不足で一回押すと固定値動くだけです。

GUIpython標準ライブラリtkinter
GUI界の古参、TKのpython実装になります。
……本当はWEBでやりたかったのだけどね。
僕のスキルセットではjavascriptのアクションとpythonスクリプトを紐づけすることが難しいんだ!(半ギレ

実際のところ

XYZの3軸

#! /usr/bin/python3
from RpiMotorLib import RpiMotorLib
import RPi.GPIO as GPIO
import tkinter as tk

def init():
  print("init pins")
  GPIO.setmode(GPIO.BCM)
  GPIO.setup(4, GPIO.OUT)
  GPIO.output(4, GPIO.HIGH)


def setBase(dir,step,dist):
  GPIO_pins=(9,10,11)
  mymotor = RpiMotorLib.A4988Nema(dir, step, GPIO_pins, "A4988")
  mymotor.motor_go(dist, "Full", 100, .005, False, .05)

## JOG機能本体。
def setXp():
  print("setXp")
  setBase(5,12,True)
def setXn():
  print("setXp")
  setBase(5,12,False)

def setYp():
  print("setYp")
  setBase(6,13,True)
def setYn():
  print("setYn")
  setBase(6,13,False)

def setZp():
  print("setZp")
  setBase(26,18,True)
def setZn():
  print("setZn")
  setBase(26,18,False)


try:
  init()
  root = tk.Tk()
  root.geometry("640x480")

  ## tkのgrid設定
  root.columnconfigure(0,weight=1)
  root.columnconfigure(1,weight=1)
  root.columnconfigure(2,weight=1)

  root.rowconfigure(0,weight=1)
  root.rowconfigure(1,weight=1)
  root.rowconfigure(2,weight=1)

  ## ステッピングモーターのボタンレイアウト。
  ## どうにも美しくないので、あとで綺麗にしたい……。
  # x axis
  button = tk.Button(root, text="X +", command=setXp, height=5,width=30).grid(row=0, column=0,padx=10,pady=10)
  button = tk.Button(root, text="X -", command=setXn, height=5,width=30).grid(row=0, column=1,padx=10,pady=10)
  # y axis
  button = tk.Button(root, text="Y +", command=setYp, height=5,width=30).grid(row=1, column=0,padx=10,pady=10)
  button = tk.Button(root, text="Y -", command=setYn, height=5,width=30).grid(row=1, column=1,padx=10,pady=10)
  # z axis
  button = tk.Button(root, text="Z +", command=setZp, height=5,width=30).grid(row=2, column=0,padx=10,pady=10)
  button = tk.Button(root, text="Z -", command=setZn, height=5,width=30).grid(row=2, column=1,padx=10,pady=10)

  # tkの画面を
  root.mainloop()

finally:
  # 最後にGPIOのお片づけ。
  GPIO.cleanup()

次の動き

悔しいので、近いうちにWEB版に再挑戦します。
chirimen.org
のような事例もあるから、できないわけじゃない筈……!!

あと、「JOG的なもの」で、ボタン押しっぱなしに未対応なので
そこも何とかしたいですね……。