在我的下一個項目中我使用延遲(10000)的4個LED。我需要一個取消這個循環的函數,並用一個新的延遲值重新開始,例如, 100.Arduino interupt延遲功能
我已經啓用了中斷,當我按下一個按鈕時,延遲變爲100輪後。我必須等待10秒..可以用新值重新啓動循環功能嗎?
在我的下一個項目中我使用延遲(10000)的4個LED。我需要一個取消這個循環的函數,並用一個新的延遲值重新開始,例如, 100.Arduino interupt延遲功能
我已經啓用了中斷,當我按下一個按鈕時,延遲變爲100輪後。我必須等待10秒..可以用新值重新啓動循環功能嗎?
哇這是粗魯的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;
}
}
這只是一個模板不是一個完整的答案。 如果您還有其他問題,請告訴我。
快樂編碼!
我想補充一下:看看例子!第一個使用arduino製作的教程是如何在延遲的情況下閃爍LED,第二個教程沒有。在嘗試失去時間之前,試着學習一下如何工作... – frarugi87 2014-10-29 12:24:50
不確定你在說什麼樣的例子,但是arduino.cc網站上的延遲函數本身有一個很好的寫法,不用它來用於計時代碼。我認爲對於剛接觸Arduino的人來說這是一個完全有效的問題。無論他們是通過示例(?),文檔還是通過在網站上提問等方式來學習它。 – djUniversal 2014-10-29 12:40:28
我實際上面臨同樣的問題,我想知道如果沒有另一種方式?這個解決方案我不喜歡的是,如果在標誌變量評估之後調用中斷,那麼函數將執行我們不想執行的操作。順便說一句,它似乎是一種彙集。有沒有辦法實際展開函數堆棧,或只是在我們進入中斷調用時指向另一個地址內存?我想確定它是否真的有可能,並且如果我能打破我的芯片這樣做? – 2015-03-03 16:28:53
有時答案是「否,你搞砸了實施,再試一次,這次指定的要求。」 – 2014-10-28 17:00:04