[英]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.