Python 结合重复的用户输入来控制while循环

Python 结合重复的用户输入来控制while循环,python,arduino,servo,Python,Arduino,Servo,我是编程新手,正在使用Python/pyfirmata通过我的arduino控制一个小伺服电机。我让马达按我想要的方式工作:它每3秒旋转x度。问题是,我希望它一直这样做,直到用户输入告诉它停止 下面的代码将持续请求用户输入,这(如果按下1+ENTER)会导致电机转动3次,然后再次请求用户输入。我想不出一种方法,让电机连续运行在这些位置,同时能够接受用户输入来停止电机 换句话说,这就是我想要做的: 电机关闭,请求用户输入。 用户按下1+ENTER键,电机开始在各个位置循环。如果用户按下2+ENTE

我是编程新手,正在使用Python/pyfirmata通过我的arduino控制一个小伺服电机。我让马达按我想要的方式工作:它每3秒旋转x度。问题是,我希望它一直这样做,直到用户输入告诉它停止

下面的代码将持续请求用户输入,这(如果按下1+ENTER)会导致电机转动3次,然后再次请求用户输入。我想不出一种方法,让电机连续运行在这些位置,同时能够接受用户输入来停止电机

换句话说,这就是我想要做的: 电机关闭,请求用户输入。 用户按下1+ENTER键,电机开始在各个位置循环。如果用户按下2+ENTER键,电机停止。如果用户再次按下1+回车键,电机将再次开始循环。看起来很简单,希望如此

我当前的代码:

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()

您可能应该仔细研究一下,这可能会有所帮助您需要一些时间来消化它,但我认为您会在其中找到您需要的一切: