2016-11-25 7 views
0

私の状況 私は72個のLEDsを制御するためにシフトレジスタを使用しています。 各LEDは、特定の要求によってアクティブにすることができます。 LEDをHIGHに設定するのは簡単ですが、LEDが点滅する必要があります。 "for"でLEDを点滅させることは問題ではありません。 私はLEDを点滅させることができました。点滅したら、新しい要求が来たときにLEDが止まりません。新しい要求が到着するまで点滅する必要があります。Arduino - readString.indexOfのループを停止しています(+ LEDの点滅が点滅しています)

私の問題は、点滅しているペリオイド(この例では3回)中に止められない場合です。たとえば、他のLED(?button1onA2)に新しいif(readString.indexOf("?button1onA2") > 0)を送信している場合、要求のLEDがまだ点滅している限り、要求は無視されます。

私の目標は、をLEDを点滅させるが、「readstring」を介して新しい要求が到着したときにを停止することです。

私の質問:

  • が、その後 for (i = 0; i < 3; i++)を使用して他のループで点滅するLEDを作るための良い方法はありますか?
  • 私はループにいますどのように私はを壊すそれを壊して、次のLEDに移動しますか?センサID 4とLEDが点滅しなければならない。この場合

マイコード

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

 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のビットマスクを点滅させ、すべてのLEDを同期して点滅させるだけです(ブロッキング以外の遅延を伴う)。

+0

おかげで、 場合、私は、コードにこれを追加し、ない 点滅している(readString.indexOf( "wall01_01?")> 0){ unsigned long型は、現在(ミリ秒を=)。 if(now - lastTime> = PERIOD)//これはPERIODミリ秒ごとにtrueになります { lastTime = now; if(ledState == LOW) { ledState = HIGH; } else { ledState = LOW; } shifter.setPin(1、ledState); shifter.write(); } } – Sebastian

+0

@セバスチャン、ソースコードを更新し、コメントの代わりに質問に説明を追加してください。 –

関連する問題