如何做一个比较值

时间:2017-03-09 19:55:18

标签: python python-3.x raspberry-pi2

我使用(Drum角色)RaspPi :)构建了这个自动化Aquaponics系统,并利用这个机会学习如何使用Python进行编码。这是一个令人惊叹的项目,作为我的第一个,但现在我达到了我的编码限制。我的生长床上有多个水传感器HC-SR04,当我向它注水时,传感器测量距离。如果达到预设距离,则指示泵停止。

这很有效,但我的冗余大脑总是处于警觉状态。如果传感器出现故障会怎样?然后泵仍在抽水,由于水的损坏我留下了保险费(这是一个室内项目40加仑水箱)。

我如何对此进行编码,以便在达到以下值之一时泵将停止?水位距传感器4厘米还是2分钟抽水?

def Pumping_to_Growbed():
print ('')
print ('Pumping water to growbed')
time.sleep(1)
distance = Growbed_Sensor1_Measurement()
print ('Distance ', distance ,'cm')
while distance > 4:
   GPIO.output(RELAY_1, False)
   print ('distance ', distance ,'cm')
   distance = Growbed_Sensor1_Measurement() 
GPIO.output(RELAY_1, True) 
time.sleep(1) 

2 个答案:

答案 0 :(得分:0)

您希望在距离大于4且经过时间少于120秒时循环。

您需要做的就是计算已用时间,并将检查纳入while条件:

start_t = time.time()

while distance > 4 and (time.time() - start_t < 120):
   ... 

然而,这假设循环将不断循环并且不会在某处被阻塞。如果你在循环中有可能长时间阻塞的调用,这将不起作用。

答案 1 :(得分:0)

如果你想在2分钟后停止。

def Pumping_to_Growbed():
    print ('')
    print ('Pumping water to growbed')
    time.sleep(1)
    distance = Growbed_Sensor1_Measurement()
    start = time()
    print ('Distance ', distance ,'cm')
    while distance > 4:
        GPIO.output(RELAY_1, False)
        print ('distance ', distance ,'cm')
        distance = Growbed_Sensor1_Measurement() 
        if time()-start >= 120:
            break
    GPIO.output(RELAY_1, True) 
    time.sleep(1)

这应该适用于time()与sleep相同的包中。