2

Arduino でのループの実行について質問があります。LED がゆっくりとフェードインするように Arduino をプログラムしました。プログラムの実行中に点滅する LED を追加したいと思います。プログラム全体を変更して、すべての行の間に LED を点滅させることもできますが、それを個別に行う方法はないかと考えていました。void setup()の下でループを実行すること、またはループを実行してから次のループに進み、最初のループを実行し続けることは可能でしょうか?

もちろん、点滅するライトはそれほど重要ではありませんが、それができるかどうかが気になりました。

4

3 に答える 3

1

この目的のためにmsTimer2ライブラリを使用することをお勧めします。

http://playground.arduino.cc/Main/MsTimer2

その使用例は、ドイツのArduinoフォーラムでの最近のディスカッションでも見つけることができます。

http://arduino.cc/forum/index.php?PHPSESSID=cf3a483ed1812def070ebeaae09691c3&topic=146086.msg1100336#msg1100336

ドイツ語を理解する必要はありません。コードを取得して試してみてください。

于 2013-02-17T14:24:42.517 に答える
0

絶対。最も洗練された解決策は、メインの実行ループとは別にタイマーを設定し、その割り込みハンドラー ベクターを使用して LED をオンまたはオフにすることです。このようにして、まばたきの頻度を正確に制御でき、メイン ループがどれだけ速いか遅いかを気にする必要がありません (時間の経過とともに計算コストの高いコードを追加または削除すると、かなり変化する可能性があります)。

于 2013-02-17T14:07:00.157 に答える
0

2 つ以上の独立したループを同時に実行することはできませんが、次のような方法で同じ効果を得ることができます。

void do_stuff_0 ();
void do_stuff_1 ();

unsigned long last_millis_0 = 0;
unsigned long last_millis_1 = 0;

const unsigned long delay_0 = ...;
const unsigned long delay_1 = ...;

void loop ()
{
  now = millis();

  if ((now - last_millis_0) >= delay_0) {
    last_millis_0 = now;
    do_stuff_0 ();
  }
  if ((now - last_millis_1) >= delay_1) {
    last_millis_1 = now;
    do_stuff_1 ();
  }
  ...
}

これは説明のためだけのものです。これを抽象化するライブラリを使用することをお勧めします。

于 2013-02-17T14:12:25.313 に答える