2014-10-28 168 views
0

在我的下一個項目中我使用延遲(10000)的4個LED。我需要一個取消這個循環的函數,並用一個新的延遲值重新開始,例如, 100.Arduino interupt延遲功能

我已經啓用了中斷,當我按下一個按鈕時,延遲變爲100輪後。我必須等待10秒..可以用新值重新啓動循環功能嗎?

+0

有時答案是「否,你搞砸了實施,再試一次,這次指定的要求。」 – 2014-10-28 17:00:04

回答

1

哇這是粗魯的ignacio 至少有幫助。

你可以做到這一點,但不是像你已經實施。

在這種情況下延遲並不好。實施的一個更好的方法是使用一個while循環是這樣的:

int delayLED = 10000; 

int beginMillis = millis(); 

while(millis() - beginMillis < delayLED) 
{ 
    // insert the code for your "interrupt" here 
    // kinda like this 
    if(button pressed) 
    { 
     delayLED = 100; 
     break; 
    } 
} 

這只是一個模板不是一個完整的答案。 如果您還有其他問題,請告訴我。

快樂編碼!

+0

我想補充一下:看看例子!第一個使用arduino製作的教程是如何在延遲的情況下閃爍LED,第二個教程沒有。在嘗試失去時間之前,試着學習一下如何工作... – frarugi87 2014-10-29 12:24:50

+0

不確定你在說什麼樣的例子,但是arduino.cc網站上的延遲函數本身有一個很好的寫法,不用它來用於計時代碼。我認爲對於剛接觸Arduino的人來說這是一個完全有效的問題。無論他們是通過示例(?),文檔還是通過在網站上提問等方式來學習它。 – djUniversal 2014-10-29 12:40:28

+0

我實際上面臨同樣的問題,我想知道如果沒有另一種方式?這個解決方案我不喜歡的是,如果在標誌變量評估之後調用中斷,那麼函數將執行我們不想執行的操作。順便說一句,它似乎是一種彙集。有沒有辦法實際展開函數堆棧,或只是在我們進入中斷調用時指向另一個地址內存?我想確定它是否真的有可能,並且如果我能打破我的芯片這樣做? – 2015-03-03 16:28:53