今現状スイッチ2個使用して1軸のサーボを下記のコードを用いて動かしてますが、現実にはMeArmロボットというものを手動でうごかしたいので4軸すべて動かせるコードをわかるかたいれば教えてください。(もちろんのことですが、1軸に対して必ず90度作動するスイッチとー90度作動するスイッチの2個、計8個のスイッチ入力を使用します。またGPIOピン番号はどれをあてはめてもかまいません。変更はこちらで勝手にします。動かすときは必ず1軸だけしか動かしません。)
import RPi.GPIO as GPIO
from time import sleep
# ポート番号やサーボモーターの情報を指定
SV_PORT = 14
SW1_PORT = 17
SW2_PORT = 18
SV_FREQ = 50 # 20ms(50Hz)
SV_DUTY_OFFSET = 0.025
SV_DUTY_RES = (2.4 - 0.5) / 20 / 180
# GPIOの設定
GPIO.setmode(GPIO.BCM)
GPIO.setup(SV_PORT , GPIO.OUT) # サーボモーターの設定
GPIO.setup([SW1_PORT , SW2_PORT],
GPIO.IN,
pull_up_down=GPIO.PUD_DOWN) # ボタンの設定
# PWMを利用する準備
servo = GPIO.PWM(SV_PORT, SV_FREQ)
servo.start(0)
sleep(0.3)
# サーボの角度を計算し変更する関数
def set_angle(angle):
if angle < -130: angle = -130
if angle > 60: angle = 60
degree = (angle + 90)
duty = (SV_DUTY_OFFSET + SV_DUTY_RES * degree) * 100
print("angle=",angle,"duty=", int(duty))
servo.ChangeFrequency(SV_FREQ)
servo.ChangeDutyCycle(duty)
# ボタンに応じてサーボの角度を変える
angle = 0
set_angle(angle)
while True:
try:
# ボタンの状態を監視
if GPIO.input(SW1_PORT) == GPIO.HIGH:
angle -= 10
set_angle(angle)
if GPIO.input(SW2_PORT) == GPIO.HIGH:
angle += 10
set_angle(angle)
sleep(0.1)
except KeyboardInterrupt:
break
GPIO.cleanup()