我使用(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)
答案 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相同的包中。