volatile uint16_t overflows = 0;
volatile bool isPressed = false;
void Count() {
isPressed = true;
}
void Pause() {
if(isPressed){
isPressed = false;
Serial.print("Tempo: ");
Serial.print(overflows);
Serial.println(" ms");
}
}
// This function will be called every time TIMER2 overflows
// and it is binded to Timer2 Overflow Interrupt Service Routine
ISR(TIMER2_OVF_vect) {
overflows ++;
}
void setup() {
Serial.begin(9600);
// Set pin 13 as output
pinMode(13, OUTPUT);
// Set pin 2 as input
pinMode(2, INPUT);
// Set pin 1 as input
pinMode(3, INPUT);
attachInterrupt(
digitalPinToInterrupt(2), Count, RISING
);
attachInterrupt(
digitalPinToInterrupt(3), Pause, RISING
);
TCCR2A = 0b00000000; // normal operation mode
TCCR2B = 0b00000100; // enabling 64 prescaler
// Clock = 250000Hz
// 1/250000 = 0.000004
// 0.000004 * 256 = 0.001024, more or less 1 milisecond
// Enable TIMER2 overflow interrupt.
TIMSK2 = TIMSK2 | 0b00000001;
// enable global interrupts
sei();
}
void loop() {
if (!isPressed) {
overflows = 0;
// Clear Timer2 counter
TCNT2 = 0;
digitalWrite(13, LOW);
}
else {
digitalWrite(13, HIGH);
}
}