Интернет-магазин «Неглупый Дом»
В другом проекте энкодер KY-040 плавно задаёт значение ЦАП шаг за шагом. Здесь та же механика — Arduino считает не шаги, а полные обороты вала, подавая сигнал зуммером на каждый завершённый круг.
Определение направления такое же: по сдвигу фаз CLK и DT счётчик шагов растёт или падает. Разница — код накапливает шаги, и когда их число достигает одного полного оборота (обычно 20 щелчков у KY-040, зависит от модели), сигналит зуммером и сбрасывает счётчик.
Число щелчков на оборот зависит от конкретной модели — посчитайте реальные щелчки за видимый полный оборот своего экземпляра.
Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, которые указаны ниже — сориентируйтесь по названиям контактов на своей плате.
// ВНИМАНИЕ: рекомендую отладить код через монитор порта, я языковая
// модель, а не специализированный кодер, могу что-то упустить. Число
// щелчков на оборот зависит от экземпляра — подставьте своё.
const int CLK_PIN = 2;
const int DT_PIN = 3;
const int BUZZER_PIN = 8;
const int STEPS_PER_REV = 20;
int stepCount = 0;
unsigned int revolutions = 0;
int lastClkState;
void setup() {
Serial.begin(9600);
pinMode(CLK_PIN, INPUT);
pinMode(DT_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
lastClkState = digitalRead(CLK_PIN);
}
void loop() {
int clkState = digitalRead(CLK_PIN);
if (clkState != lastClkState) {
if (digitalRead(DT_PIN) != clkState) stepCount++;
else stepCount--;
if (abs(stepCount) >= STEPS_PER_REV) {
revolutions++;
stepCount = 0;
tone(BUZZER_PIN, 2000, 100);
}
}
lastClkState = clkState;
}
Дополнительных библиотек не требуется. Если сигнал звучит раньше/позже реального оборота — поправьте `STEPS_PER_REV`.
Ещё модули для Arduino: Электронные модули.
🎁 Купить весь комплект со скидкой 10%
Все 2 товара сразу: 157 ₽ 141 ₽ (экономия 16 ₽)
Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.
Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.