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

Dependents:   STM32_Encoder TFT_Touch_Menu_Encoder Encoder_rotativo TFT_Touch_Menu_Touch

Encoder.h

Committer:
zelmic
Date:
2018-06-20
Revision:
0:e1a3b380b0d6

File content as of revision 0:e1a3b380b0d6:

/*
* Автор - Железняков Андрей
* Сайт - 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