LujO6 a raison, le module TimerOne (ou Timer2) fonctionne très bien pour ce genre de chose.
Voici un exemple d'utilisation du module.
Tu verras que la Led 13 cligne au 500 milliseconde et que le port sériel est examiné au 10 milliseconde.
La fonction "Loop" ne fait strictement rien, comme c'est souvent le cas en programmation par événements.
#include <TimerOne.h>
// exemple d'utilisation de TimerOne
// référence: http://www.arduino.cc/playground/Code/Timer1
void SerialHandler(void)
// renvoie le car recu
// appel au 10 millisecondes
{
char car ;
if (Serial.available())
{
car = Serial.read() ;
Serial.write(car) ;
}
}
void BlinkHandler(void)
// cligne led 13
// appel au 500 milliseconde
{
static bool flag ;
flag = !flag ;
digitalWrite(13,flag) ;
}
void TimerHandler(void)
// appelé tous les 10 milliseconde
{
static int ticks = 0 ;
SerialHandler() ;
ticks++ ;
if (ticks == 50) // 50 * 10 ms = 500 milli écoulé
{
BlinkHandler() ;
ticks = 0 ;
}
}
void setup()
{
pinMode(13, OUTPUT);
Serial.begin(9600) ;
Timer1.initialize(10000); // initialise Timer1 période 10 milliseconde
Timer1.attachInterrupt(TimerHandler); // attache TimerHandler
}
void loop()
{
// Fait rien
}