这个python代码有什么问题?它看起来还不错

时间:2017-08-28 15:22:42

标签: python raspberry-pi gpio

condition = float(29.0)

while True:
        GPIO.output(17, GPIO.HIGH)
        if temp_c <  condition:
                break

值temp_c是一个浮点数并且每秒都会改变。 当temp_c值大于29.0时,我希望GPIO输出打开。有什么问题?

3 个答案:

答案 0 :(得分:0)

您将17针设置为HIGH,但不会返回LOW。 达到条件时,您需要将其明确设置为低级别:

while True:
    GPIO.output(17, GPIO.HIGH)
    if temp_c <  condition:
        GPIO.output(17, GPIO.LOW)
            break

但执行流程并不是很好。 以下情况会更好:

GPIO.output(17, GPIO.HIGH)
while temp_c >= condition:
    pass
GPIO.output(17, GPIO.LOW)

在这里,必须注意以下几点:

  • 如果某个引脚设置为给定级别,它将保持该级别。无需重复设置,就像在GPIO.output(17, GPIO.HIGH)循环内调用while一样;
  • 您想等待满足特定条件。因此,您只需在不满足时循环。这只是由while not condition: pass完成,或while not condition: continuepass是一个空语句)。这允许摆脱while True,这是最好避免的(虽然有时在特定情况下需要)。

答案 1 :(得分:0)

每次调用输出函数,如果温度低于29,则断开循环。如果温度高于29,则需要高值:

condition = float(29.0)

while True:
        if temp_c >  condition:
           GPIO.output(17, GPIO.HIGH)
           break

答案 2 :(得分:0)

您需要关闭GPIO引脚才能看到任何变化。

以下是您问题的即时解决方法:

if temp_c <  condition:
    GPIO.output(17, GPIO.LOW)
    break

但是您不必在每次迭代时设置引脚状态。更有效地实现您想要的是:

condition = float(29.0)
GPIO.output(17, GPIO.HIGH)
while True :
    if temp_c < condition :
        GPIO.output(17, GPIO.LOW)
        break

您可以通过将if条件移动到while条件来提高效率,但是您必须记住其余的代码块。