簡體   English   中英

在while循環中只運行一次,而不會中斷循環

[英]Run something only once in while loop without breaking the loop

import RPi.GPIO as g
import time
g.setmode(g.BOARD)
g.setup(33, g.OUT)



while True:
  tempfile = open("/sys/devices/w1_bus_master1/28-00152c2631ee/w1_slave")
  thetext = tempfile.read()
  tempfile.close()
  tempdata = thetext.split("\n") [1].split(" ")[9]
  temperature = float(tempdata[2:])
  finaltemp = temperature / 1000
  time.sleep(1)

  if finaltemp > 22:
    g.output(33,g.LOW)
    time.sleep(0.3)
    g.output(33,g.HIGH)
  else:
    g.output(33,g.LOW)
    time.sleep(0.3)
    g.output(33,g.HIGH)

我搜索了許多站點,包括這一站點,但從未找到我的解決方案。

如您所見,該代碼當前從系統文件中獲取溫度並將溫度存儲在變量“ finaltemp”中。
我進行硬件設置的方式是將繼電器開關連接到AC遙控器上的按鈕,這就是為什么我將GPIO設置為非常快(0.3秒)打開和關閉以模擬按下的原因。遙控器上的按鈕。

我的目標是在溫度根據條件變化時僅“閃爍”(按一下按鈕)GPIO一次(!)。

例如

室內溫度為20,此時交流電源已關閉。 因此,溫度正在緩慢上升,當溫度超過22時,我想運行3行代碼來運行。 但是,發生的事情是每次都會對其進行檢查。 由於條件在每次while循環重新開始時都滿足,因此它會不斷地重復運行代碼,因此本質上發生的是我的AC不斷地打開和關閉以及打開和關閉。

您當前正在做的只是檢查溫度,並使用一種條件來保持打開和關閉AC的狀態,您已經知道這是行不通的。

這是因為您的條件語句僅查看溫度,而不查看AC的當前狀態,例如,如果希望在溫度高於22C時打開AC,則應該遵循以下內容:

if temperature > 22 && AC == off
    // turn on AC

您需要同時添加狀態滯后

開啟/關閉邏輯的偽代碼:

LIMIT_LOW = 21.5
LIMIT_HIGH = 22.5
AC_running = False  # False or True, you need to know exactly
while True:
  temp = ....
  if temp < LIMIT_LOW and AC_running:
      # turn AC off
      AC_running = False
  elif temp > LIMIT_HIGH and not AC_running:
      # turn AC on
      AC_running = True
  sleep(...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM