From a294a2b99051b7b9155f692e1963006ea487134a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D1=80=D1=82=D1=91=D0=BC=20=D0=9D=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D0=BA=D0=BE=D0=B2?= Date: Thu, 29 Feb 2024 10:31:11 +0000 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20Encoder.h?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Encoder.h | 56 +++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 50 insertions(+), 6 deletions(-) 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