2017-08-28 93 views
1
condition = float(29.0) 

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

值temp_c是一个浮动,并且每秒都在变化。 当temp_c值大于29.0时,我希望GPIO输出处于打开状态。哪里不对?这个python代码有什么问题?它看起来没什么问题

+1

虽然我不熟悉GPIO,但它似乎需要更多信息来解决您的问题。 –

+2

'temp_c'被设置在哪里?它在while循环中没有改变。 –

回答

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) 

这里,几件事情必须注意:

  • 如果一个引脚设置为给定的水平,将保持在这一水平。没有必要重复设置它,就像您在while循环内调用GPIO.output(17, GPIO.HIGH)一样;
  • 你想等待一个特定的条件得到满足。因此,只有在不满足时才能循环。这简单地通过while not condition: passwhile not condition: continuepass是一个空语句)完成。这允许摆脱while True,这可避免(尽管在特定情况下有时需要)。
+0

它不起作用。我第一次跑的时候,别针停留了,第二次没有打开。 – NullCoderExists

0

您调用输出功能每次如果如果你想要高的值,如果温度高于29更高的温度比29低打破循环:

condition = float(29.0) 

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

不起作用。没有任何反应 – NullCoderExists

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 

你能做出这样更有效的利用,如果条件移动到while条件,但你必须这样做,请记住您,而其余代码块。

+0

不起作用。当temp_c达到30时,什么都不会发生 – NullCoderExists

+0

'如果temp_c> condition',而不是其他方式 – stevieb

+0

您原来的问题是'当temp_c值大于29.0时,我希望GPIO输出处于打开状态。当temp_c变为低于29.0时,答案会将GPIO引脚变为“off”。 – AbhiramH