簡體   English   中英

如何循環伺服電機並停止並再次循環?

[英]how do I loop servo motor and stop and loop again?

我買了mg995伺服電機,但似乎控制與mg90不同,因為它是數字的。

我想要做的是旋轉 mg995 循環,當我按下 ctrl+c 時停止,當我按下 enter 時再次開始循環。 代碼在下面,但在servo1.stop()之后它不會再次循環

from cmath import inf
from PIL import Image
import numpy as np

import RPi.GPIO as GPIO     
from time import sleep      


################# -----------------------------
GPIO.setmode(GPIO.BCM)      

servo1_pin = 18                  

GPIO.setup(servo1_pin, GPIO.OUT)   
servo1 = GPIO.PWM(servo1_pin, 50)  
servo1.start(0)  


servo_min_duty = 3               
servo_max_duty = 12             


def set_servo_degree(servo_num, degree):
    if degree > 180:
        degree = 180
    elif degree < 0:
        degree = 0

    duty = servo_min_duty+(degree*(servo_max_duty-servo_min_duty)/180.0)
    if servo_num == 1:
        servo1.ChangeDutyCycle(duty)



#################-------------------------------


try:
  while True:
    set_servo_degree(1, 0)
    
except KeyboardInterrupt: 
  servo1.stop() # after servo stops, it won't start again.
  print("should be end")
  pass

go_button = input('go? press enter!')
if go_button == "":
   ## after press the enter, starts loop again. 
    try:
      while True:
        set_servo_degree(1, 0)
    
else:
    break()


sleep(2)                           
GPIO.cleanup()             



謝謝你!

while循環應該在set_servo_degree函數之外。

您的代碼的修改部分如下

servo_num = 1
servo_deg = 0

while True:
    try:
        set_servo_degree(servo_num, servo_deg)
    except KeyboardInterrupt:
        servo1.stop()
        go_button = input('go? press enter!')
        if go_button == "":
            set_servo_degree(servo_num, servo_deg)
        else:
            break

sleep(2)
GPIO.cleanup()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM