
Интернет-магазин «Неглупый Дом»
Вращение энкодера KY-040 в одну сторону увеличивает счётчик, в другую — уменьшает: удобный ручной счётчик посетителей, деталей или чего угодно ещё, без отдельных кнопок «плюс» и «минус».
KY-040 — инкрементальный энкодер: два контакта CLK и DT замыкаются по очереди со сдвигом фазы при вращении оси. Сравнивая, какой из них изменился первым на каждом "щелчке", можно точно определить направление вращения — по часовой стрелке счётчик растёт, против часовой — уменьшается. В отличие от обычных кнопок, энкодер не нужно щёлкать дважды для "плюс" и "минус" — это одна и та же ось, крутящаяся в разные стороны.
У KY-040 есть встроенная кнопка (вывод SW) — сама ось энкодера нажимается как обычная кнопка, что здесь используется для сброса счётчика в ноль без лишней механики.
Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, что указаны ниже — сориентируйтесь по названиям контактов на своей плате.
// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить. Основу
// и идею я накидал, но проверьте под свою схему.
#include <TM1637Display.h>
const int clkPin = 2;
const int dtPin = 3;
const int swPin = 4;
TM1637Display display(5, 6); // CLK, DIO
int counter = 0;
int lastClk;
void setup() {
Serial.begin(9600);
pinMode(clkPin, INPUT);
pinMode(dtPin, INPUT);
pinMode(swPin, INPUT);
lastClk = digitalRead(clkPin);
display.showNumberDec(counter);
}
void loop() {
int clk = digitalRead(clkPin);
if (clk != lastClk) {
if (digitalRead(dtPin) != clk) {
counter++;
} else {
counter--;
}
display.showNumberDec(counter);
Serial.print("Счётчик: ");
Serial.println(counter);
}
lastClk = clk;
if (digitalRead(swPin) == HIGH) {
counter = 0;
display.showNumberDec(counter);
Serial.println("Сброс");
delay(300); // простое антидребезговое ожидание после нажатия
}
}
Нажатие на встроенную кнопку энкодера (пин SW) сбрасывает счётчик в ноль — удобно начинать новый подсчёт без перезагрузки платы.
Ещё модули для Arduino: Электронные модули.
🎁 Купить весь комплект со скидкой 10%
Все 2 товара сразу в корзину: 186 ₽ 167 ₽ (экономия 19 ₽)
Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.
Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.