Эта библиотека позволяет подключить энкодер KY-040. Дополнительную информацию можно найти в моём блоге itworkclub.ru

Dependents:   STM32_Encoder TFT_Touch_Menu_Encoder Encoder_rotativo TFT_Touch_Menu_Touch

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