基本ライブラリ
デジタルIO
アナログIO
拡張IO
時間
数学
三角関数
乱数
ビットバイト操作
割り込み
シリアル通信
標準ライブラリ
Ethernet
Ethernetサーバー
Ethernetクライアント
サーボモーター
ステッピングモーター
キャラクタ液晶表示
EEPROM
SPI通信
I2C通信(Wire)
メモリカード
メモリカード(File操作)
画像処理
周期処理
時計(RTC)
ユーティリティ
周期処理
周期的な処理を行うためのライブラリです。 3タイプのライブラリが用意されています。
MsTimer2は、ArduinoのPlaygroundに掲載されているものとと同様の文法で使用可能です。MsTimer2を使用するためには、#include <MsTimer2.h>
を記述してください。
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インターバル関数の登録を解除します。/dd>
- 文法
- detachIntervalTimerHandler()
- パラメータ
- なし
- 戻り値
- なし
MsTimer2::set
- 概要
- 指定した周期間隔(ms)で処理する関数を登録します。
- 文法
- MsTimer2::set(unsigned long ms, void (*function)())
- パラメータ
- ms: 周期(ms)
function: 関数名 - 戻り値
- なし
- 注意
- タイマー処理(function)内はデフォルトでは割り込み禁止で実行されます。割り込みを伴う処理はinterrupts()で割り込み許可してください。
MsTimer2::start
- 概要
- setしたタイマーをスタートします。
- 文法
- MsTimer2::start()
- パラメータ
- なし
- 戻り値
- なし
MsTimer2::stop
- 概要
- タイマーをストップします。
- 文法
- MsTimer2::stop()
- パラメータ
- なし
- 戻り値
- なし
attachCyclicHandler
- 概要
- 指定した周期間隔(ms)で処理する関数を登録します。関数呼び出し時にシステム開始からの時間(ms)が引数として取得できます。
- 文法
- attachCyclicHandler(unsigned char number, void(*)(unsigned long) function, unsigned int time)
- パラメータ
- number: 0~7(関数の識別番号)
function: 関数名
time: 周期(ms) - 戻り値
- なし
detachCyclicHandler
- 概要
- 周期関数の登録を解除します。
- 文法
- detachCyclicHandler(unsigned char number)
- パラメータ
- number: 0~7(関数の識別番号)
- 戻り値
- なし
- 注意
- loop関数内で処理されるため、loop周期よりも短い間隔を指定しても正しく実行されません。
サンプルプログラム
1ms周期関数とMsTimer2を使ったサンプルです。
#include <Arduino.h>
#include <MsTimer2.h>
void using_mstimer2() {
static boolean output = HIGH;
digitalWrite(PIN_LED0, output);
output = !output;
}
// this function is called every 1ms.
void using_intervaltimer(unsigned long ms){
static boolean output = HIGH;
static unsigned long time;
if((ms - time) > 1000){
interrupts(); // to allow USB operation
Serial.println(ms);
time = ms;
digitalWrite(PIN_LED1, output);
output = !output;
}
}
void setup() {
pinMode(PIN_LED0, OUTPUT);
pinMode(PIN_LED1, OUTPUT);
Serial.begin(9600);
MsTimer2::set(500, using_mstimer2); // 500ms period
MsTimer2::start();
attachIntervalTimerHandler(using_intervaltimer);
}
void loop() {
}