2

さまざまなセンサーからデータを読み込む arduino プロジェクトに取り組んでいます。値を取得して配列に格納します。問題は、センサー値を異なるレートで更新したいということです。たとえば、250ms ごとに更新するのではなく、50ms ごとに更新したいとします。しかし、センサーの更新の間に実行されるループにしたいと思います。私が考えることができる唯一の方法は、遅延を使用することですが、それによってループが停止します。

4

3 に答える 3

2

読み取りたいセンサーごとに間隔を設定して、millis()関数を使用できます。ArduinoWebサイトのBlinkWithoutDelayの例をご覧ください

http://arduino.cc/en/Tutorial/BlinkWithoutDelay

于 2012-07-25T15:08:57.343 に答える
0

チェックするセンサーがたくさんある場合は、Metro ライブラリを使用してコーディングを少し節約できます。BRMの回答と同じ一般的な概念。タイマー割り込みも使用できます。タイマー割り込みに関する多数の記事へのリンクを含む情報については、Move now, don't delay()ブログ投稿を参照してください。

于 2012-07-25T17:38:33.260 に答える
0

ライブラリを使用したくない場合は、次のように実装できます。

typedef void (*command)();

template <unsigned long wait_ms, command c>
void repeat() {
    static unsigned long start = millis();
    if (millis()-start >= wait_ms) {
        start += wait_ms;
        c();
    }
}

void task1() {
    // every 50ms
}

void task2() {
    // every 250ms
}

void setup() {
}


void loop() {
    repeat< 50, task1>();
    repeat<250, task2>();  
}

これは、ループ内で「ブロック」するものがない限り機能します。

于 2013-10-26T19:42:57.833 に答える