diff --git a/Encoder.c b/Encoder.c index 494965e..cbc69f9 100644 --- a/Encoder.c +++ b/Encoder.c @@ -1,68 +1,72 @@ +#include "Encoder.h" #include #include + /* Дефайны */ -#define F_CPU 1000000UL // тактовая частота -#define PIND_MASK 0b00001100 // Маска для сравнения с PIND +#define PIND_MASK 0b00001100 + /* Переменные */ -volatile uint8_t next_state, prev_state, up_state, down_state, state; -int sw34; // Передача +volatile int32_t next_state, prev_state, up_state, down_state, state; +int sw34; // Передача +int32_t encoder_value = 0; + /* Прерывания */ ISR(TIMER1_COMPA_vect) { - next_state = PIND & PIND_MASK; // Считываем текущее значение битов - if (next_state != prev_state) { - switch (prev_state) { - case 8: { - if (next_state == 3) state++; - if (next_state == 0) state--; - break; - } - case 0: { - if (next_state == 2) state++; - if (next_state == 1) state--; - break; - } - case 4: { - if (next_state == 0) state++; - if (next_state == 3) state--; - break; - } - case 12: { - if (next_state == 1) state++; - if (next_state == 2) state--; - break; - } - default: { - break; - } + next_state = PIND & PIND_MASK; + if (next_state != prev_state) { + switch (prev_state) { + case 8: { + if (next_state == 3) state++; + if (next_state == 0) state--; + break; + } + case 0: { + if (next_state == 2) state++; + if (next_state == 1) state--; + break; + } + case 4: { + if (next_state == 0) state++; + if (next_state == 3) state--; + break; + } + case 12: { + if (next_state == 1) state++; + if (next_state == 2) state--; + break; + } + default: { + break; + } + } + prev_state = next_state; // Присваиваем текущему состоянию предыдущее } - prev_state = next_state; // Присваиваем текущему состоянию предыдущее - } - TCNT1H = 0x00; - TCNT1L = 0x00; // Обнуляем счетчик(на всякий случай) + TCNT1H = 0x00; + TCNT1L = 0x00; // Обнуляем счетчик(на всякий случай) + encoder_value = state; } -void timer1_init() { - TCCR1A = 0x00; - TCCR1B |= (1<