#include <Arduino.h>
#define SetBit(x,y) (x|=(1<<y))
#define ClrBit(x,y) (x&=~(1<<y))
#define TestBit(x,y) (x&(1<<y))
void setup()
{
TCCR1A = 0; // pour un fonctionnement normal des timers de l'Arduino, les emplacements WGM13, WGW12, WGM11, WGM10 des bus TCCR1A et TCCR1B doivent être mis à 0
TCCR1B = 0;
SetBit(TCCR1B, CS12); // mise à 1 de l'emplacement CS12 sur le registre TCCR1B afin de diviser la clock des timers par 256 (la fréquence de base de de 16Mhz est beaucoup trop élevée pour mesurer une seconde)
SetBit(TCCR1B, WGM12); // mise à 1 de l'emplacement WGM12 pour un fonctionnement en mode CTC
SetBit(DDRB, DDB7); // met à 1 l'emplacement "DDB7" du registre "DDRB" qui est utilisé pour définir le sens (entrée ou sortie), ici, PB7 (pin 13 sur Arduino Mega, la LED intégrée) est une sortie
OCR1A = 31250; // inscription de la valeur de référence dans le comparateur
// ici on compte jusqu'à la valeur TOP : 0.5 * 62 500 = 31 250
}
void loop()
{
if(TestBit(TIFR1, OCF1A)) // condition : comparaison TIFR1.OCF1A == 1
{
SetBit(PINB,PINB7); // change la led
SetBit(TIFR1, OCF1A); // remet le flag
}
}