mate-driver/firmware/input.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;
}