Энкодер (датчик вращения, «валкодер») — устройство, формирующее определенные сигналы во время вращения его вала. Благодаря этому свойству, энкодер является, главным образом, устройством управления и ввода. Область применения энкодеров довольно широка.
Модуль энкодера (Type 2) является модулем механического энкодера EC11.
На анимации ниже представлено схематичное изображение принципа работы энкодера. На схеме изображен металлический диск с некоторым количеством лучей на подложке из диэлектрика и три контакта. Контакт C (соединенный с выводом GND) подключен к металлическому диску всегда, в то время как A (S1) и B (S2) замыкаются на диск только в определенные фазы его вращения. Диск, очевидно, выступает в роли перемычки между A и C, равно как и для B и C. Когда A замыкается с C, то сигнал появляется на выводе S1, а когда с B – на выводе S2.
Контактная группа модуля:
- S1 — выдает импульсы, свидетельсвующие о смене позиции (шаге) вала;
- S2 — выдает импульсы, позволяющие определить в какую сторону вращается вал;
- KEY — вывод тактовой кнопки;
- 5V – питание, 5 В;
- GND – питание, «земля».
Пример

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#define S1 10 #define S2 9 #define KEY 8 #include "GyverEncoder.h" Encoder enc1(S1, S2, KEY); void setup() { Serial.begin(9600); enc1.setType(TYPE2); // тип энкодера TYPE1 одношаговый, TYPE2 двухшаговый. Если ваш энкодер работает странно, смените тип } void loop() { // обязательная функция отработки. Должна постоянно опрашиваться enc1.tick(); if (enc1.isTurn()) { // если был совершён поворот (индикатор поворота в любую сторону) // ваш код } if (enc1.isRight()) Serial.println("Right"); // если был поворот if (enc1.isLeft()) Serial.println("Left"); if (enc1.isRightH()) Serial.println("Right holded"); // если было удержание + поворот if (enc1.isLeftH()) Serial .println("Left holded"); if (enc1.isPress()) Serial.println("Press"); // нажатие на кнопку (+ дебаунс) if (enc1.isRelease()) Serial.println("Release"); // отпускание кнопки (+ дебаунс) if (enc1.isHolded()) Serial.println("Holded"); // если была удержана и энк не поворачивался //if (enc1.isHold()) Serial.println("Hold"); // возвращает состояние кнопки } |