简体   繁体   English

如何循环伺服电机并停止并再次循环?

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

I bought mg995 servo motor but it seems controlling is different from the mg90 because it is digital.我买了mg995伺服电机,但似乎控制与mg90不同,因为它是数字的。

What I want to do is spinning mg995 loop, stops when I press ctrl+c and starts loop again when I press the enter.我想要做的是旋转 mg995 循环,当我按下 ctrl+c 时停止,当我按下 enter 时再次开始循环。 the code is below but it won't loop again after servo1.stop()代码在下面,但在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()             



thank you!谢谢你!

The while loop should be outside of the set_servo_degree function. while循环应该在set_servo_degree函数之外。

The modified part of your code is as below您的代码的修改部分如下

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