如何在Python中添加定时延迟以进行硬件控制

时间:2018-10-23 02:08:53

标签: python time raspberry-pi

我设法在Raspberry PI上构造一些python代码来控制车库门。但是我不知道如何添加定时延迟,以便将控件限制为正确的移动时间。

任何帮助将不胜感激。

我的工作代码如下。

    import RPi.GPIO as GPIO          
    from time import sleep

    in1 = 24
    in2 = 23
    en = 25
    temp1=1

   GPIO.setmode(GPIO.BCM)
   GPIO.setup(in1,GPIO.OUT)
   GPIO.setup(in2,GPIO.OUT)
   GPIO.setup(en,GPIO.OUT)
   GPIO.output(in1,GPIO.LOW)
   GPIO.output(in2,GPIO.LOW)
   p=GPIO.PWM(en,1000)
   p.start(25)
   print("\n")
   print("The default speed & direction of motor is LOW & Forward.....")
   print("r-run s-stop f-forward b-backward l-low m-medium h-high e-exit")
   print("\n")    

   while(1):
   x = input()
   if x=='r':
   print("run")
   if(temp1==1):
   GPIO.output(in1,GPIO.HIGH)
   GPIO.output(in2,GPIO.LOW)
   print("forward")
   x='z'
   else:
   GPIO.output(in1,GPIO.LOW)
   GPIO.output(in2,GPIO.HIGH)
   print("backward")
   x='z'


   elif x=='s':
   print("stop")
   GPIO.output(in1,GPIO.LOW)
   GPIO.output(in2,GPIO.LOW)
   x='z'

   elif x=='f':
   print("forward")
   GPIO.output(in1,GPIO.HIGH)
   GPIO.output(in2,GPIO.LOW)
   temp1=1
   x='z'

   elif x=='b':
   print("backward")
   GPIO.output(in1,GPIO.LOW)
   GPIO.output(in2,GPIO.HIGH)
   temp1=0
   x='z'

   elif x=='l':
   print("low")
   p.ChangeDutyCycle(25)
   x='z'

   elif x=='m':
   print("medium")
   p.ChangeDutyCycle(50)
   x='z'

   elif x=='h':
   print("high")
   p.ChangeDutyCycle(75)
   x='z'


    elif x=='e':
    GPIO.cleanup()
    break

    else:
    print("<<<  wrong data  >>>")
    print("please enter the defined data to continue.....")

2 个答案:

答案 0 :(得分:1)

无法提供PI代码,但想添加一点警告。如果您依靠时间来关闭电动机,则任何汽车,儿童,自行车等都会被关上的门压碎。您是否可以将电流传感器连接到Pie,以便在电动机电流超过一定量时停止运行?看看These

迈克。

答案 1 :(得分:0)

此问题和答案How can I make a time delay in Python?显示了如何在代码中添加定时延迟。

import time
# delay for 10 seconds
time.sleep(10)

但这不是最佳解决方案。最好在这里使用这些解决方案:https://raspberrypi.stackexchange.com/questions/69640/add-delay-between-two-gpio-output,并且我还建议您使用大头针来捕获信息,例如使用传感器开关(有多种类型)从门上捕获打开或关闭的信息。