2017-08-28 88 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