Эта библиотека позволяет подключить энкодер KY-040. Дополнительную информацию можно найти в моём блоге itworkclub.ru
Dependents: STM32_Encoder TFT_Touch_Menu_Encoder Encoder_rotativo TFT_Touch_Menu_Touch
Diff: Encoder.h
- Revision:
- 0:e1a3b380b0d6
diff -r 000000000000 -r e1a3b380b0d6 Encoder.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Encoder.h Wed Jun 20 15:21:16 2018 +0000 @@ -0,0 +1,53 @@ +/* +* Автор - Железняков Андрей +* Сайт - itworkclub.ru +* Данный класс описывает энкодер с кнопкой KY-040 +* Обработка вращения и нажатий происходит с помощью прерываний. +* При вращении энкодера меняется состояние переменной State +* в ту или иную сторону. Значения переменной State ограничены заданным +* диапазоном, например, от 0 до 100 или 0т 300 до 500. Диапазон задается +* функцией setRange. По умолчанию диапазон от 0 до 100. +* Узнать текущее значение энкодера можно с помощью функции getState(); +* Нажата ли кнопка с помощью функции getButtonState(); +* К энкодеру припаяны два дополнительных конденсатора по 1000пФ для устранения +* дребезга: один между GND и CLK, второй между GND и DT. Если этих конденсаторов +* нет, то необходимо раскомментировать задержку в функции encode. Так же +* необохдимо проверить запаян ли подтягивающий резистор 10кОм на кнопку SW +* Его необходимо припаять. +*/ + +#ifndef Encoder_H +#define Encoder_H + + +#include "mbed.h" + +class EncoderAli +{ + public: + // В конструкторе задаем пины, к которым подключен энкодер + EncoderAli(PinName DT,PinName CLK1,PinName SW); + + int getState(); // возвращает положение энкодера + void setRange(int minValue,int maxValue);// задает диапазон + bool getButtonState();// true - кнопка нажата, false - отжата + private: + + int State; // положение энкодера + bool work; // флаг, который поднимается, когда идет обработка прерывания + // и опускается по заверщении прерывания. + int minValue_; // минимальное значение энкодера + int maxValue_; // максимальное значение энкодера + bool button; //true - кнопка нажата, false - отжата + + DigitalIn DT_; + InterruptIn CLK1_; + InterruptIn SW_; + + void encode(void); //обработчик вызывается при повороте энкодера + void buttonPress(void); //обработчик вызывается при нажатии кнопки + void buttonUp(void); // обработчик вызывается при отпускании кнопки + +}; + +#endif \ No newline at end of file