Освой Arduino играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
Модуль KY-040 служит для ручного управления приборами. Управление происходит с помощью вращения рукоятки. В отличие от переменных резисторов, у которых угол поворота ограничен, датчиком можно делать непрерывный полный оборот. Это очень удобно и позволяет выполнять точную настройку регулируемого параметра. Под рукояткой расположена кнопка.
На плате смонтирован валкодер PEC11-4220F-S0024. С нижней стороны платы резисторы 10 кОм. Соединитель содержит 5 штыревых контактов. Не обязательно использовать все контакты. Два контакта отвечают за кнопку, три – за выход импульсов энкодера.
На ножку+ подаём питание, на GND – землю. CLK - импульсы отсчёта, соединён с резистором, подключаем к цифровому пину. DT - импульсы направления, соединён с резистором, подключаем к цифровому пину. SW - контакт кнопки, контакты разомкнуты в ожидании нажатия, подключаем к цифровому пину.
KY-040 | Arduino
----------------
GND | GND
+ | 5V
SW | D
DT | D
CLK | D
Скетч.
/* Define digital pins used to read the encoder */
#define DT 2
#define CLK 3
#define SW 4
void setup()
{
Serial.begin(9600);
pinMode(DT, INPUT);
pinMode(CLK, INPUT);
pinMode(SW, INPUT);
digitalWrite(SW, HIGH);
}
void loop()
{
int counter;
byte dialPos;
byte lastDialPos;
/* Reset the counter */
counter = 0;
/* Continiouously read the state of the encoder */
while (1)
{
/* Read the status of the dial */
dialPos = (digitalRead(CLK) << 1) | digitalRead(DT);
/* Is the dial being turned anti-clockwise? */
if (dialPos == 3 && lastDialPos == 1)
{
counter--;
}
/* Is the dial being turned clockwise? */
if (dialPos == 3 && lastDialPos == 2)
{
counter++;
}
/* Output the counter to the serial port */
Serial.println(counter);
/* Is the switch pressed? */
if (!digitalRead(SW))
Serial.println("Switch pressed!");
/* Save the state of the encoder */
lastDialPos = dialPos;
}
}
Входит в состав набора Набор из 37 датчиков
Также имеется отдельная библиотека Encoder, доступная через менеджер библиотек.
Шаг 8. Изучаем функционал датчика KY-040(энкодер)
Подключение энкодера к Arduino