diff --git a/Encoder.h b/Encoder.h index e409811..3aafb94 100644 --- a/Encoder.h +++ b/Encoder.h @@ -1,8 +1,52 @@ -#ifndef Encoder_h -#define Encoder_h -#include +#ifndef ENC_H +#define ENC_H -void encoder_Initialization(); -int get_encoder_value(); +// Определяем бит в регистре PIND для сигнала с клока энкодера. +#define PIND_CLK 0b00010000 +// Определяем бит в регистре PIND для сигнала с DT энкодера. +#define PIND_DT 0b01000000 -#endif /*Encoder_h*/ + int encoder_state, prev_encoder_state = 3, state = 1; + +void read_encoder_state(void) +{ + int pin_clk_2, pin_dt_2; + // Устанавливаем начальные значения переменных равное 0 + pin_clk_2 = 0; + pin_dt_2 = 0; + + // Устанавливаем значение PIN_CLK_2 в зависимости от установки бита PIND_CLK в PIND + pin_clk_2 = (PIND & PIND_CLK) ? 1 : 0; + // Устанавливаем значение PIN_DT_2 в зависимости от установки бита PIND_DT в PIND + pin_dt_2 = (PIND & PIND_DT) ? 1 : 0; + + if ( pin_clk_2 != prev_encoder_state) + { + prev_encoder_state = pin_clk_2; + if ( !pin_clk_2 ) + { + switch(PIND & pin_dt_2 ) + { + case 0: state--; break; + case 1: state++; break; + } + } + } +} + +void encoder_setup(void) +{ + // Настройка портов ввода-вывода + DDRD = 0x00; + PORTD = (PIND_CLK + PIND_DT); +} + +int encoder_value(void) +{ + // Читаем состояние энкодера + read_encoder_state(); + return state; +} +//#include "enc.cpp" + +#endif /*ENC_H*/ \ No newline at end of file