2016-11-25 244 views
0

我的情況 我使用移位寄存器來控制72個LED個別。 每個LED都可以通過特定的要求激活。將LED設置爲高電平很容易,但LED應該閃爍。通過「for」使LED閃爍不成問題。 我設法使LED閃爍,一旦它閃爍,當有新的請求進來時它不會停止.LED應該閃爍直到一個新的請求到達。Arduino - 停止readString.indexOf(+閃爍LED環路中斷)迴路

我的問題是如果在閃爍期間(在這個例子中3次)我無法阻止它。例如,如果我發送一個新的if(readString.indexOf("?button1onA2") > 0)作爲其他LED(?button1onA2)的示例,只要來自請求之前的LED仍閃爍,該請求將被忽略。

我的目標是使LED閃爍,但停止時通過「readstring」的新請求到達。

我的問題:

  • 是否有更好的方式,使LED在其他的循環,然後使用 for (i = 0; i < 3; i++)閃爍?
  • 其中一個我在循環中我怎麼能打破它,並轉移到下一個LED?

我的代碼

if (readString.indexOf("?button1onA1") > 0) 在這種情況下,LED與傳感器ID 4應閃爍。

 if (readString.indexOf("?button1onA1") > 0) { 

     for (i = 0; i < 3; i++) 
     { 
      shifter.setPin(4, HIGH); 
      shifter.write(); 
      delay(200); 
      shifter.setPin(4, LOW); 
      shifter.write(); 
      delay(200); 

     } 
+0

我投票結束這個問題,因爲這個問題屬於arduino.stackexchange.com網站。 – zx485

回答

1

您必須使用非阻塞延遲(例如,Blink Without Delay)。 一個好方法是使用狀態機(或其中的很多)。

但理論上,您可以只存儲LED的位掩碼,使其閃爍,並同步閃爍(非阻塞延遲)。

+0

感謝, 我加入代碼,但是沒有閃爍 如果( 「?wall01_01」 readString.indexOf()> 0){ 無符號長現在=米利斯(); if(now - lastTime> = PERIOD)//這將在每個PERIOD毫秒中爲真 { lastTime = now;如果(ledState ==低) ledState =高; } else { ledState = LOW; } shifter.setPin(1,ledState); shifter.write(); } } – Sebastian

+0

@Sebastian,請更新源代碼並在您的問題中添加說明,而不是評論。 –