DueTimer
Timer Library to work with Arduino DUE
Installation
- Download the Latest release from GitHub.
- Unzip and modify the Folder name to "DueTimer" (Remove the '-version')
- Paste the modified folder on your Library folder (On your
Libraries
folder inside Sketchbooks or Arduino software). - Re-open Arduino Software
Getting Started
To call a function handler
every 1000
microseconds:
Timer3.attachInterrupt(handler).start(1000);
// or:
Timer3.attachInterrupt(handler).setPeriod(1000).start();
// or, to select whichever available timer:
Timer.getAvailable().attachInterrupt(handler).start(1000);
To call a function handler
10
times a second:
Timer3.attachInterrupt(handler).setFrequency(10).start();
In case you need to stop a timer, just do like this:
Timer3.stop();
And to continue running:
Timer3.start();
There are 9
Timer objects already instantiated for you:
Timer0
, Timer1
, Timer2
, Timer3
, Timer4
, Timer5
, Timer6
, Timer7
and Timer8
.
TIPs and Warnings
Timer4.attachInterrupt(handler).setFrequency(10).start();
// Is the same as:
Timer4.attachInterrupt(handler);
Timer4.setFrequency(10);
Timer4.start();
// To create a custom timer, refer to:
DueTimer myTimer = DueTimer(0); // Creates a Timer 0 object.
DueTimer myTimer = DueTimer(3); // Creates a Timer 3 object.
DueTimer myTimer = DueTimer(t); // Creates a Timer t object.
// Note: Maximum t allowed is 8, as there is only 9 timers [0..8];
Timer1.attachInterrupt(handler1).start(10);
Timer1.attachInterrupt(handler2).start(10);
DueTimer myTimer = DueTimer(1);
myTimer.attachInterrupt(handler3).start(20);
// Will run only handle3, on Timer 1 (You are just overriding the callback)
Timer.getAvailable().attachInterrupt(callback1).start(10);
// Start timer on first available timer
DueTimer::getAvailable().attachInterrupt(callback2).start(10);
// Start timer on second available timer
// And so on...
DueTimer myTimer = Timer.getAvailable();
if (myTimer != DueTimer(0))
// Now we know that the timer returned is actually available
// Can compare timers using == or !=
Compatibility with Servo.h
Because Servo Library uses the same callbacks of DueTimer, we provides a custom solution for working with both of them. However, Timers 0,2,3,4 and 5 will not Work anymore.
You will need uncommend the line in DueTimer.h
in DueTimer
folder inside the Libraries
folder. Uncomment the following line in DueTimer.h
:
#define USING_SERVO_LIB true
Library Reference
You should know:
-
getAvailable()
- Get the first available Timer. -
attachInterrupt(void (*isr)())
- Attach a interrupt (callback function) for the timer of the object. -
detachInterrupt()
- Detach current callback of timer. -
start(long microseconds = -1)
- Start the timer with an optional period parameter. -
stop()
- Stop the timer -
setFrequency(long frequency)
- Set the timer frequency -
long getFrequency()
- Get the timer frequency -
setPeriod(long microseconds)
- Set the timer period (in microseconds) -
long getPeriod()
- Get the timer period (in microseconds)
You don't need to know:
<<<<<<< HEAD
-
int timer
- Stores the object timer id (to access Timers struct array). -
DueTimer(unsigned short _timer)
- Instantiate a new DueTimer object for Timer _timer (NOTE: All objects are already instantiated!). -
static const Timer Timers[]
- Stores all timers information -
static void (*callbacks[])()
- Stores all callbacks for all timers
Hardware Information
More information on the Timer Counter module of the µC on the Arduino Due can be found in the documentation file TimerCounter.