【问题标题】:Starting and stopping python script, but running for set amount of time启动和停止 python 脚本,但运行设定的时间
【发布时间】:2016-03-18 16:37:18
【问题描述】:

我有一个连接到树莓派的线性致动器,它可以通过按钮打开和关闭。我希望该执行器移动规定的总时间。示例:我希望执行器运行的总时间是 5 秒。如果用户按下按钮启动执行器,它就会开始移动。然后在 3 秒后,用户再次按下按钮,它就会停止。然后,如果他们再次推动它,它就会开始移动,并在 5 秒后自动停止。这是我用按钮运行电机的代码,我现在只想整合时间。有什么想法吗?

from Adafruit_MotorHAT import Adafruit_MotorHAT, Adafruit_DCMotor
import RPi.GPIO as GPIO
import atexit
from time import sleep
from threading import Thread

GPIO.setmode(GPIO.BCM)
GPIO.setup(23,GPIO.IN)
GPIO.setup(24,GPIO.IN)

# create a default object, no changes to I2C address or frequency
mh = Adafruit_MotorHAT(addr=0x60)

# recommended for auto-disabling motors on shutdown!
def turnOffMotors():
   mh.getMotor(1).run(Adafruit_MotorHAT.RELEASE)
   mh.getMotor(2).run(Adafruit_MotorHAT.RELEASE)
   mh.getMotor(3).run(Adafruit_MotorHAT.RELEASE)
   mh.getMotor(4).run(Adafruit_MotorHAT.RELEASE)

atexit.register(turnOffMotors)

################################# DC motor test!
myMotor = mh.getMotor(3)

# set the speed to start, from 0 (off) to 255 (max speed)
myMotor.setSpeed(255)
myMotor.run(Adafruit_MotorHAT.FORWARD);
# turn on motor
myMotor.run(Adafruit_MotorHAT.RELEASE);


snooziness = 5
stateOn = 0
stateOff = 0
while (True):

    if(GPIO.input(23)== False) and (stateOn==0):
       myMotor.run(Adafruit_MotorHAT.FORWARD)
       sleep(snooziness)
       myMotor.run(Adafruit_MotorHAT.RELEASE)
       stateOn=1

    if(GPIO.input(23)== False) and (stateOn==1):
       myMotor.run(Adafruit_MotorHAT.RELEASE)
       stateOn=0


    if(GPIO.input(24)== False) and (stateOff==0):
       myMotor.run(Adafruit_MotorHAT.BACKWARD)
       sleep(snooziness)
       myMotor.run(Adafruit_MotorHAT.RELEASE)
       stateOff=1

    if(GPIO.input(24)== False) and (stateOff==1):
       myMotor.run(Adafruit_MotorHAT.RELEASE)
       stateOn=0

    continue

【问题讨论】:

    标签: python raspberry-pi


    【解决方案1】:

    可能是这样的:

    import time
    
    running = False
    stop_time = None
    
    while(True):
        if(buttonPushed()):
            if running:
                running = False
                stop_motor()
                stop_time = None
            else
                running = True
                start_motor()
                stop_time = time.time() + 5
        if stop_time is not None and time.time() > stop_time():
            running = False
            stop_motor()
            stop_time = None
    

    我认为这证明了我将使用的逻辑,尽管那里显然存在一些可以整理的代码冗余

    【讨论】:

      猜你喜欢
      • 2013-02-04
      • 2018-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-05
      • 2020-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多