Python 结合重复的用户输入来控制while循环
我是编程新手,正在使用Python/pyfirmata通过我的arduino控制一个小伺服电机。我让马达按我想要的方式工作:它每3秒旋转x度。问题是,我希望它一直这样做,直到用户输入告诉它停止 下面的代码将持续请求用户输入,这(如果按下1+ENTER)会导致电机转动3次,然后再次请求用户输入。我想不出一种方法,让电机连续运行在这些位置,同时能够接受用户输入来停止电机 换句话说,这就是我想要做的: 电机关闭,请求用户输入。 用户按下1+ENTER键,电机开始在各个位置循环。如果用户按下2+ENTER键,电机停止。如果用户再次按下1+回车键,电机将再次开始循环。看起来很简单,希望如此 我当前的代码:Python 结合重复的用户输入来控制while循环,python,arduino,servo,Python,Arduino,Servo,我是编程新手,正在使用Python/pyfirmata通过我的arduino控制一个小伺服电机。我让马达按我想要的方式工作:它每3秒旋转x度。问题是,我希望它一直这样做,直到用户输入告诉它停止 下面的代码将持续请求用户输入,这(如果按下1+ENTER)会导致电机转动3次,然后再次请求用户输入。我想不出一种方法,让电机连续运行在这些位置,同时能够接受用户输入来停止电机 换句话说,这就是我想要做的: 电机关闭,请求用户输入。 用户按下1+ENTER键,电机开始在各个位置循环。如果用户按下2+ENTE
from pyfirmata import SERVO
from pyfirmata import Arduino
board = Arduino("COM4")
board.digital[10].mode = SERVO
servo1 = board.get_pin('d:10:0')
while True:
user_control = input('Enter 1 to start motor and 2 to stop motor \n')
if user_control == '1':
servo1.write(45)
time.sleep(3)
servo1.write(90)
time.sleep(3)
servo1.write(180)
time.sleep(3)
elif user_control == '2':
servo1.write(45)
print('motor paused')
感谢大家的投入。我现在已经按照我想要的方式工作了。最后,我创建了一个线程来运行
user\u input
函数和threading.Timer
使其循环,以便每1秒可以提供一次新的输入。该线程的输出在arduino上设置一个引脚值,该值确定控制电机的while循环是否运行,从而转动电机。再次感谢!我的代码如下
from pyfirmata import SERVO
from pyfirmata import Arduino, util
import threading
import time
board = Arduino("COM4")
board.digital[10].mode = SERVO
servo1 = board.get_pin('d:10:o')
LED = board.get_pin('d:8:o')
servo1.write(15)
def user_input():
userinput = input('Press 1 or 2\n')
if userinput == '1':
return board.digital[7].write(1)
elif userinput == '2':
return board.digital[7].write(0)
elif userinput != "1" or "2":
input('Press 1 or 2\n')
t1 = threading.Thread(user_input())
threading.Timer(1,user_input).start()
def autorun():
while board.digital[7].read() == 1:
servo1.write(45)
time.sleep(2)
servo1.write(90)
time.sleep(2)
servo1.write(180)
time.sleep(2)
if board.digital[7].read() == 0:
print('automatic run stopped')
autorun()
您可能应该仔细研究一下,这可能会有所帮助您需要一些时间来消化它,但我认为您会在其中找到您需要的一切: