Эта библиотека позволяет подключить энкодер KY-040. Дополнительную информацию можно найти в моём блоге itworkclub.ru
Dependents: STM32_Encoder TFT_Touch_Menu_Encoder Encoder_rotativo TFT_Touch_Menu_Touch
Encoder.h@0:e1a3b380b0d6, 2018-06-20 (annotated)
- Committer:
- zelmic
- Date:
- Wed Jun 20 15:21:16 2018 +0000
- Revision:
- 0:e1a3b380b0d6
ver. 1.0
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
zelmic | 0:e1a3b380b0d6 | 1 | /* |
zelmic | 0:e1a3b380b0d6 | 2 | * Автор - Железняков Андрей |
zelmic | 0:e1a3b380b0d6 | 3 | * Сайт - itworkclub.ru |
zelmic | 0:e1a3b380b0d6 | 4 | * Данный класс описывает энкодер с кнопкой KY-040 |
zelmic | 0:e1a3b380b0d6 | 5 | * Обработка вращения и нажатий происходит с помощью прерываний. |
zelmic | 0:e1a3b380b0d6 | 6 | * При вращении энкодера меняется состояние переменной State |
zelmic | 0:e1a3b380b0d6 | 7 | * в ту или иную сторону. Значения переменной State ограничены заданным |
zelmic | 0:e1a3b380b0d6 | 8 | * диапазоном, например, от 0 до 100 или 0т 300 до 500. Диапазон задается |
zelmic | 0:e1a3b380b0d6 | 9 | * функцией setRange. По умолчанию диапазон от 0 до 100. |
zelmic | 0:e1a3b380b0d6 | 10 | * Узнать текущее значение энкодера можно с помощью функции getState(); |
zelmic | 0:e1a3b380b0d6 | 11 | * Нажата ли кнопка с помощью функции getButtonState(); |
zelmic | 0:e1a3b380b0d6 | 12 | * К энкодеру припаяны два дополнительных конденсатора по 1000пФ для устранения |
zelmic | 0:e1a3b380b0d6 | 13 | * дребезга: один между GND и CLK, второй между GND и DT. Если этих конденсаторов |
zelmic | 0:e1a3b380b0d6 | 14 | * нет, то необходимо раскомментировать задержку в функции encode. Так же |
zelmic | 0:e1a3b380b0d6 | 15 | * необохдимо проверить запаян ли подтягивающий резистор 10кОм на кнопку SW |
zelmic | 0:e1a3b380b0d6 | 16 | * Его необходимо припаять. |
zelmic | 0:e1a3b380b0d6 | 17 | */ |
zelmic | 0:e1a3b380b0d6 | 18 | |
zelmic | 0:e1a3b380b0d6 | 19 | #ifndef Encoder_H |
zelmic | 0:e1a3b380b0d6 | 20 | #define Encoder_H |
zelmic | 0:e1a3b380b0d6 | 21 | |
zelmic | 0:e1a3b380b0d6 | 22 | |
zelmic | 0:e1a3b380b0d6 | 23 | #include "mbed.h" |
zelmic | 0:e1a3b380b0d6 | 24 | |
zelmic | 0:e1a3b380b0d6 | 25 | class EncoderAli |
zelmic | 0:e1a3b380b0d6 | 26 | { |
zelmic | 0:e1a3b380b0d6 | 27 | public: |
zelmic | 0:e1a3b380b0d6 | 28 | // В конструкторе задаем пины, к которым подключен энкодер |
zelmic | 0:e1a3b380b0d6 | 29 | EncoderAli(PinName DT,PinName CLK1,PinName SW); |
zelmic | 0:e1a3b380b0d6 | 30 | |
zelmic | 0:e1a3b380b0d6 | 31 | int getState(); // возвращает положение энкодера |
zelmic | 0:e1a3b380b0d6 | 32 | void setRange(int minValue,int maxValue);// задает диапазон |
zelmic | 0:e1a3b380b0d6 | 33 | bool getButtonState();// true - кнопка нажата, false - отжата |
zelmic | 0:e1a3b380b0d6 | 34 | private: |
zelmic | 0:e1a3b380b0d6 | 35 | |
zelmic | 0:e1a3b380b0d6 | 36 | int State; // положение энкодера |
zelmic | 0:e1a3b380b0d6 | 37 | bool work; // флаг, который поднимается, когда идет обработка прерывания |
zelmic | 0:e1a3b380b0d6 | 38 | // и опускается по заверщении прерывания. |
zelmic | 0:e1a3b380b0d6 | 39 | int minValue_; // минимальное значение энкодера |
zelmic | 0:e1a3b380b0d6 | 40 | int maxValue_; // максимальное значение энкодера |
zelmic | 0:e1a3b380b0d6 | 41 | bool button; //true - кнопка нажата, false - отжата |
zelmic | 0:e1a3b380b0d6 | 42 | |
zelmic | 0:e1a3b380b0d6 | 43 | DigitalIn DT_; |
zelmic | 0:e1a3b380b0d6 | 44 | InterruptIn CLK1_; |
zelmic | 0:e1a3b380b0d6 | 45 | InterruptIn SW_; |
zelmic | 0:e1a3b380b0d6 | 46 | |
zelmic | 0:e1a3b380b0d6 | 47 | void encode(void); //обработчик вызывается при повороте энкодера |
zelmic | 0:e1a3b380b0d6 | 48 | void buttonPress(void); //обработчик вызывается при нажатии кнопки |
zelmic | 0:e1a3b380b0d6 | 49 | void buttonUp(void); // обработчик вызывается при отпускании кнопки |
zelmic | 0:e1a3b380b0d6 | 50 | |
zelmic | 0:e1a3b380b0d6 | 51 | }; |
zelmic | 0:e1a3b380b0d6 | 52 | |
zelmic | 0:e1a3b380b0d6 | 53 | #endif |