簡體   English   中英

啟動和停止python腳本,但運行指定的時間

[英]Starting and stopping python script, but running for set amount of time

我有一個線性執行器連接到樹莓派,該樹莓派通過按鈕按下即可打開和關閉。 我希望該執行器移動總計規定的時間。 示例:我希望執行器運行的總時間為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

也許像:

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

我認為這說明了我將使用的邏輯,盡管顯然那里有些代碼冗余可以解決

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM