[英]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.