2017-07-24 45 views
-2

我是一個絕對noob在蟒蛇,主要是在編程也。 (所以要批評我希望我可以從太學)Python,如何檢查a> = b 5秒?我用while循環,並在其他功能延遲

我想創建我的一個樹莓派3「計劃」,與Raspbian OS

我的問題是這樣的:

我想測試「如果a> = b持續5秒」(其中「a」是我從其他函數中的串行讀出的值)

如果是的話做一些事情,如果不做別的事情,似乎很簡單...

我準備好了「聚會」在我的代碼中解決了它一次在我的一個函數中有一個while循環,但是當我將「等待while循環」複製到其他函數時,它開始產生巨大的延遲(這與我在額外while循環中添加的時間大致相同)

我真的希望有人能夠給我建議任何其他的方法來檢查,「如果5秒> = b」比while循環等

或者,如果有人有一些空閒時間來檢查我的代碼,並告訴我犯了什麼錯誤(可能是很多noob錯誤)

這裏是我的代碼,它不包含關鍵2 while while循環(只有一個延遲30秒)

`https://pastebin.com/RmEcLRJA` 

而這裏的其他與2個額外while循環,這似乎在共約6-14秒延遲(我xwatts變量)的測量(我得到3秒的延遲在每個while循環)

`https://pastebin.com/HB99vH9c` 

PS對於鏈接我的代碼是安靜的很長,在這裏粘貼兩次

我的值「a」是一個不斷變化的值,它在不到1秒內更新,我需要知道如果a> = b持續5秒,如果下降1個讀數只(0.1秒),則必須重新啓動5秒。「計時器」

+4

歡迎來到SO,如果你創建一個最簡單的例子,你會得到更多的答案:https://stackoverflow.com/help/mcve – Y0da

+0

堆棧溢出通常會使代碼滾動,如果它太長,這是一個有趣的小格式化的東西。雖然如果你想做鏈接,你可以使用'[]''()'語法,在[]中''s中保存要顯示的超鏈接文本,'()'保存實際的鏈接,[如此](https://stackoverflow.com/editing-help#code)。雖然如果你可以創建一個更小的例子來更好地展示你正在努力的事情,那麼讀者可以更容易地幫助你。 –

+0

是的,鏈接格式不適用於pasebin鏈接... –

回答

0

您可以使用

import time 
end_time = time.time() + 5 
while 'Wait 5 seconds': 
    if a >= b: 
     ... 

    if time.time() > end_time: 
     break 

還準備卸下碼內的所有time.sleep()將解決您的延遲問題。

+0

是不是因爲你所有的'time.sleep()'?你有沒有繪製你的邏輯?也許這只是一個算法問題。 – Y0da

+0

如果我運行1 while while循環延遲版本,它的工作完美,所以我認爲這不是由「時間」造成的。睡眠()「,因爲當我使用簡單的」if「而沒有」while循環「來計算時間,它實時測量實際上 –

+0

我的值」a「是一個不斷變化的值,它在不到1秒內更新,我需要要知道如果一個> = b持續5秒,如果它只下降1個讀數(0.1秒),它必須重新啓動5秒鐘「計時器」 –