34 lines
606 B
C
34 lines
606 B
C
#include "input.h"
|
|
|
|
uint16_t volatile last_count;
|
|
|
|
void input_init() {
|
|
MCUCR |= (1 << ISC10);
|
|
EIFR |= (1 << INTF1);
|
|
|
|
last_count = 0;
|
|
}
|
|
|
|
ISR(INT1_vect) {
|
|
if((PORTB & (1 << PD3)) != 0) {
|
|
TCCR1B |= (1 << CS11); //Prescaler 8, enable Timer
|
|
TCNT1 = 0;
|
|
} else {
|
|
TCCR1B &= ~(1 << CS11); //Prescaler 8, disable Timer
|
|
last_count = TCNT1;
|
|
}
|
|
}
|
|
|
|
int16_t input_get_result() {
|
|
uint16_t tmp = last_count;
|
|
if(tmp < 1000) {
|
|
tmp = 0;
|
|
}
|
|
tmp = (tmp - 1000);
|
|
if(tmp > 1000) {
|
|
tmp = 1000;
|
|
}
|
|
|
|
return ((int16_t)tmp) / 2 - 1000;
|
|
}
|