【发布时间】: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