Classe+Timer2

Home > Robótica > Bibliotecas **Recursos** > RunTimer > **Timer2** > CircularBuffer > SerialLog > ActionPlan **Dispositivos** > Ultrassom > Array de sensores > NRF24L01 > Wireless log > RF24Control **Movimento** > StepperMotor > StepperMotorTm > DoubleStepper > DoubleStepperTm > DoubleMove

Esta classe realmente foi um achado. Pesquisando na internet sobre o uso do timer2 do arduino, me deparei com um código antigo feito por William Kalfelz (@http://www.wusik.com/ww/) para uma das primeiras versões do arduino baseado no código da função //tone//. Consegui atualizar o código para funcionar com as versões mais novas e dei o meu toque nele para facilitar o uso. O resultado é uma classe pequena, simples e funcional que permite usar o timer2 do arduino para gerar eventos em intervalos precisos de tempo.

Se for usar, fique avisado que o uso do timer2 faz com que a função tone e notone do arduino deixem de funcionar. Além disso o timer2 também controla o //pwm// dos pinos 3 e 11 do arduino Uno e dos pinos 9 e 10 do arduino Mega. Usando o timer2 não será mais possível usar o //pwm// nesses pinos. Se não for necessário um controle muito preciso de tempo, recomendo o uso da classe //**RunTimer**//.

Abaixo a declaração pública de Timer2:

code format="java5" class Timer2 { public: Timer2; void init(void (*f)); void start(unsigned long microsseconds); void stop; } code

O uso é bem simples, crie uma instância da classe e a inicialize no setup chamando o método init para informar a função que será chamada a cada evento. A função deve ser do tipo void e não ter parâmetros. Para ativar o timer use o método start informado o intervalo de tempo em microssegundos. O método stop para e libera o timer.

**IMPORTANTE:** O código executado a cada evento tem que ser rápido para que um evento não se sobreponha a outro.

Abaixo um exemplo de uso:

code format="java5"
 * 1) include 

void timer2Event { //aqui o código que será executado a cada evento. }

Timer2 tm2;

void setup { tm2.init(timer2Event); tm2.start(1000); // 1000 microssegundos (=1 milissegundo) }

void loop { // } code