基本ライブラリ
デジタルIO
アナログIO
拡張IO
時間
数学
三角関数
乱数
ビットバイト操作
割り込み
シリアル通信
標準ライブラリ
サーボモーター
ステッピングモーター
キャラクタ液晶表示
EEPROM
SPI通信
I2C通信(Wire)
メモリカード
メモリカード(File操作)
Ethernet
Ethernetサーバー
Ethernetクライアント
Firmata
周期処理
省電力
時計(RTC)
SoftwareSerial
ユーティリティ
周期処理
周期的な処理を行うためのライブラリです。4タイプのライブラリが用意されています。
- 1ms周期固定で1関数を実行する。
- 1us周期固定で1関数を実行する。
- 指定周期で1関数を実行する。(MsTimer2)
- 指定周期で複数の周期関数を実行する。ただし、Loop関数の周期に影響されます。
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インターバル関数の登録を解除します。
文法
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
概要
マイクロ秒のインターバル関数の登録を解除します。
文法
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)戻り値
なし
注意
loop関数内で処理されるため、loop周期よりも短い間隔を指定しても正しく実行されません。
detachCyclicHandler
概要
周期関数の登録を解除します。
文法
detachCyclicHandler(unsigned char number)
パラメータ
number: 0~7(関数の識別番号)
戻り値
なし
サンプルプログラム
1ms周期関数とMsTimer2を使ったサンプルです。
#include <Arduino.h>
#include <MsTimer2.h>
void using_mstimer2() {
static boolean output = HIGH;
digitalWrite(12, 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(13, output);
output = !output;
}
}
void setup() {
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
Serial.begin(9600);
MsTimer2::set(500, using_mstimer2); // 500ms period
MsTimer2::start();
attachIntervalTimerHandler(using_intervaltimer);
}
void loop() {
}