Estou fazendo a seguinte aplicação: estou usando o attachInterrupt() para contagem rápida de um sensor no pino 2, com interrupção por hardware. Também estou utilizando a MsTimer2 para uma interrupção por tempo, afim de calcular a velocidade. Precisaria de uma outra interrupção com um outro timer, para de 30 em 30 segundos gravar o valor da contagem atual na EEPROM. Alguém saberia como posso resolver isto, sem que prejudique a função de interrupção por hardware?
#include <MsTimer2.h>
// Declaração das variáveis de contagem de pulsos e metragem
int sensor_pulsos = 2,
metragem=0,
mtr_atual=0,
mtr_anterior=0;
long cnt_absoluto = 0,
cnt_atual = 0,
cnt_anterior = 0;
//Decaração das variáveis de contagem de velocidade
int velocidade;
// Esta função "setup" roda uma vez quando a placa e ligada ou resetada
void setup() {
pinMode(sensor_pulsos, INPUT); // Configura o pino como entrada para o sensor
attachInterrupt(0,contagemRapida,RISING); //Configurando a interrupção para ser chamada em borda de subida
MsTimer2::set(1000, calc_velocidade); // período de interrupção por timer de 1000ms
MsTimer2::start();
Serial.begin(9600);
}
// Função que se repete infinitamente quando a placa é ligada
void loop() {
calc_metragem();
}
//Inicialisa Rotina do Serviço de Interrupção
void contagemRapida(){
cnt_absoluto ++;
Serial.print(cnt_absoluto); // Imprime o valor atual do cnt_absoluto
Serial.println();
}
void calc_metragem(){
cnt_atual = cnt_absoluto - cnt_anterior;
cnt_anterior = cnt_absoluto;
metragem = 284 * cnt_absoluto;
}
void calc_velocidade(){
mtr_atual = metragem - mtr_anterior;
velocidade = mtr_atual / 1000; //cálculo com base no timer setado para 1 segundo
}