周期処理

周期的な処理を行うためのライブラリです。

attachCyclicHandler

概要

指定した周期間隔(ms)で処理する関数を登録します。関数呼び出し時にシステム開始からの時間(ms)が引数として取得できます。

文法

attachCyclicHandler(unsigned char number, void(*)(unsigned long) function, unsigned int time)

パラメータ

number: 0~7(関数の識別番号)
function: 関数名
time: 周期(ms)

戻り値

なし

注意

loop関数内で処理されるため、loop周期よりも短い間隔を指定しても正しく実行されません。

detachCyclicHandler

概要

周期関数の登録を解除します。

文法

detachCyclicHandler(unsigned char number)

パラメータ

number: 0~7(関数の識別番号)

戻り値

なし

attachIntervalTimerHandler

概要

1ms間隔で実行したい関数を登録します。

文法

attachIntervalTimerHandler(void(*)(unsigned long) function)

パラメータ

function: 関数名

戻り値

なし

補足

以下の関数が呼び出し可能です。
pinMode(), digitalWrite(), digitalRead(), millis(), micros(), delayMicroseconds(), min(), max(), constrain(), map(), lowByte(), highByte(), bitRead(), bitWrite(), bitSet(), bitClear(), bit(), randomSeed(), random()
Note: pinMode(), digitalWrite()は、loop()内で使用しているピンと同じ番号を指定すると誤動作する可能性があります。

detachIntervalTimerHandler

概要

1msインターバル関数の登録を解除します。

文法

detachIntervalTimerHandler()

パラメータ

なし

戻り値

なし

attachMicroIntervalTimerHandler

概要

指定された間隔[us]で実行したい関数を登録します。

文法

attachIntervalTimerHandler(void(*)(unsigned long) function, uint16_t interval)

パラメータ

function: 関数名
interval: 周期[us]

戻り値

なし

補足

以下の関数が呼び出し可能です。
pinMode(), digitalWrite(), digitalRead(), millis(), micros(), delayMicroseconds(), min(), max(), constrain(), map(), lowByte(), highByte(), bitRead(), bitWrite(), bitSet(), bitClear(), bit(), randomSeed(), random()
Note: pinMode(), digitalWrite()は、loop()内で使用しているピンと同じ番号を指定すると誤動作する可能性があります。
関数の登録によりtone()が使用できなくなります。tone()から変更する場合は、HOOK_TIMER_CHANNELを変更してください。

detachMicroIntervalTimerHandler

概要

マイクロ秒のインターバル関数の登録を解除します。

文法

detachMicroIntervalTimerHandler()

パラメータ

なし

戻り値

なし


サンプルプログラム

100msごとの周期関数を呼び出し、周期関数で取得した時間をloop内で500msごとに出力します。


        #include <Arduino.h>
        void test_cyclic_handler(unsigned long u32ms);
        unsigned long time;
         
        void setup()
        {
          Serial.begin(9600);
          attachCyclicHandler(0, test_cyclic_handler, 100);
        }
         
        void loop()
        {
          Serial.println(time);
          delay(500);
        }
         
        void test_cyclic_handler(unsigned long u32ms)
        {
          time = u32ms;
        }