🛒
0 товар.
0 руб.
Логотип

Интернет-магазин «Неглупый Дом»

☰
ИИ-консультант Wildberries OZON Яндекс Маркет
Поиск по сайту
Гугл таблица с ассортиментом

📜 Проект: навигация по меню на LCD1602 энкодером KY-040

Энкодер KY-040 и LCD1602

Энкодер KY-040 листает пункты меню вращением, встроенная кнопка подтверждает выбор.

Как это работает

Внутри KY-040 два контакта (CLK и DT) замыкаются по очереди при вращении вала — так называемая квадратурная схема. Сравнивая, какой из них изменился первым, плата определяет направление вращения: по часовой или против. Отдельная встроенная кнопка SW — обычная механическая кнопка на замыкание при нажатии на сам вал.

Пошаговая сборка

Разводка модулей у разных производителей отличается — если на вашей плате контакты называются иначе, сориентируйтесь по маркировке.

  1. KY-040: CLK → D2, DT → D3, SW → D4, VCC → 5V, GND → GND.
  2. LCD1602 с модулем I2C: SDA → A4, SCL → A5, адрес обычно 0x27 или 0x3F.
  3. Если энкодер "дёргается" или пропускает щелчки, добавьте в код антидребезг (задержку) после регистрации поворота.

Скетч

// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить.

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

const int clkPin = 2;
const int dtPin = 3;
const int swPin = 4;
LiquidCrystal_I2C lcd(0x27, 16, 2);
String menuItems[] = {"Яркость", "Температура", "Режим", "Выход"};
const int menuCount = 4;
int selected = 0;
int lastClk;

void showMenu() {
  lcd.setCursor(0, 0);
  lcd.print("> ");
  lcd.print(menuItems[selected]);
  lcd.print("            ");
  Serial.println(menuItems[selected]);
}

void setup() {
  Serial.begin(9600);
  pinMode(clkPin, INPUT);
  pinMode(dtPin, INPUT);
  pinMode(swPin, INPUT);
  lastClk = digitalRead(clkPin);
  lcd.init();
  lcd.backlight();
  showMenu();
}

void loop() {
  int clk = digitalRead(clkPin);
  if (clk != lastClk) {
    if (digitalRead(dtPin) != clk) {
      selected = (selected + 1) % menuCount;
    } else {
      selected = (selected - 1 + menuCount) % menuCount;
    }
    showMenu();
  }
  lastClk = clk;

  if (digitalRead(swPin) == HIGH) {
    lcd.setCursor(0, 1);
    lcd.print("Selected!   ");
    Serial.println("Подтверждено");
    delay(500);
  }
}
                

Массив `menuItems` — готовый шаблон: замените строки на свои пункты, а в блоке «Selected!» подставьте действие для каждого пункта.

Частые проблемы

Как улучшить проект

Товары по теме

Ещё модули для Arduino: Электронные модули.

← 🔆 диммер освещения на энкодере K…🕹️ управление цветом RGB-светодио… →

🎁 Купить весь комплект со скидкой 10%

Все 2 товара сразу: 314 ₽ 283 ₽ (экономия 31 ₽)

Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.

Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.

Корзина

Поиск


Пример: понижающий или DC-DC или mini360 или aw-023 или арт. OZ/WB/YA