Periodic Operation

This library allows users to call a function periodically. 4 types of timers are prepared. MsTimer2, one of the types, is compatible with Arduino Uno described in Arduino Playground. It is necessary to specify #include <MsTimer2.h> for using MsTimer2.

attachIntervalTimerHandler

Description
Specifies a call back function executed in the interval timer interrupt handler. The specified call back function is called every 1ms of the interval timer interrupt once it's attached.
Syntax
attachIntervalTimerHandler(void(*)(unsigned long) function)
Parameters
function: Name of the handler
Returns
None
Remark
The following libraries can be called in the handler:
pinMode(), digitalWrite(), digitalRead(), millis(), micros(), delayMicroseconds(), min(), max(), constrain(), map(), lowByte(), highByte(), bitRead(), bitWrite(), bitSet(), bitClear(), bit(), randomSeed(), random()
Note: pinMode(), digitalWrite() may use the pins that are used in function loop(), which may cause a misoperation.

detachIntervalTimerHandler

Description
Turns off the call back function in the interval timer interrupt handler.
Syntax
detachIntervalTimerHandler()
Parameters
None
Returns
None

attachMicroIntervalTimerHandler

Description
Specifies a call back function executed in the interval timer interrupt handler. The specified call back function is called in time specified parameter[us].
Syntax
attachIntervalTimerHandler(void(*)(unsigned long) function, uint16_t interval)
Parameters
function: Name of the handler
interval: Interval time[us]
Returns
None
Remark
The following libraries can be called in the handler:
pinMode(), digitalWrite(), digitalRead(), millis(), micros(), delayMicroseconds(), min(), max(), constrain(), map(), lowByte(), highByte(), bitRead(), bitWrite(), bitSet(), bitClear(), bit(), randomSeed(), random()
Note: pinMode(), digitalWrite() may use the pins that are used in function loop(), which may causes a mis-operation.
tone() is disabled after setting a function. Modify HOOK_TIMER_CHANNEL when you want to change from tone().

MsTimer2::set

Description
Specifies a call back function executed in the specified interval timer interrupt handler.
Syntax
MsTimer2::set(unsigned long ms, void (*function)())
Parameters
ms: Interval(ms)
function: Function name
Returns
None
Notes
The handler is executed by disabled interrupt. In case of executing with use of interrupt, permit an interrupt by interrupt().

MsTimer2::start

Description
Start the timer after set
Syntax
MsTimer2::start()
Parameters
None
Returns
None

MsTimer2::stop

Description
Stop the timer
Syntax
MsTimer2::stop()
Parameters
None
Returns
None

detachIntervalTimerHandler

Description
Turns off the call back function in the interval timer interrupt handler.
Syntax
detachIntervalTimerHandler()
Parameters
None
Returns
None

attachCyclicHandler

Description
Specifies a cyclic call back function. The specified call back function is called at the cycle specified by this function.
Syntax
attachCyclicHandler(unsigned char number, void(*)(unsigned long) function, unsigned int time)
Parameters
number: ID (0 to 7)
function: Function of the interval timer interrupt
time: Interval time in ms
Returns
None

detachCyclicHandler

Description
Turns off the interval call back function.
Syntax
detachCyclicHandler(unsigned char number)
Parameters
number: ID (0 to 7)
Returns
None
Note
The cyclic handler is executed in a loop.

Sample Program

This sample tries to use both the 1ms periodic function and 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() {
}