
Интернет-магазин «Неглупый Дом»
В другом проекте на сайте джойстик KY-023 включает реле резким отклонением по оси X в одну конкретную сторону. Здесь используется другая ось (Y) и другая логика: зуммер подаёт сигнал при отклонении от центра в ЛЮБУЮ сторону, а не только в одну, — например, как сигнализация о том, что рычаг механизма вышел за безопасные пределы хода в любом направлении.
Считывание оси Y такое же, как и в проекте с реле: `analogRead()` даёт число от 0 до 1023, где центр соответствует примерно середине диапазона. Разница — в способе сравнения с порогом: вместо проверки "больше одного конкретного числа" код сравнивает АБСОЛЮТНОЕ отклонение от центра (`abs(yValue - center)`) с порогом, срабатывая одинаково при отклонении и в одну, и в другую сторону от середины.
Этот же приём сравнения по модулю уже использовался в проекте с непрерывной сигнализацией на аналоговом датчике Холла — там он делал сигнал нечувствительным к полярности магнита, здесь — нечувствительным к направлению отклонения джойстика, то есть одинаково реагирующим и на "вверх", и на "вниз" от центрального положения.
Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, которые указаны ниже — сориентируйтесь по названиям контактов на своей плате.
// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить. Основу
// и идею я накидал, но проверьте под свою схему.
const int Y_PIN = A1;
const int BUZZER_PIN = 8;
const int CENTER = 512; // проверьте реальное значение покоя в мониторе порта
const int DEVIATION_THRESHOLD = 300; // подберите по месту
void setup() {
Serial.begin(9600);
pinMode(BUZZER_PIN, OUTPUT);
}
void loop() {
int yValue = analogRead(Y_PIN);
int deviation = abs(yValue - CENTER);
if (deviation > DEVIATION_THRESHOLD) {
tone(BUZZER_PIN, 2000, 100);
}
delay(50);
}
Дополнительных библиотек не требуется — только `analogRead()` и `tone()`. Распечатайте в мониторе порта реальное значение в покое перед использованием — у многих экземпляров джойстика `CENTER` заметно отличается от 512, и это стоит учесть при подборе `DEVIATION_THRESHOLD`.
Ещё модули для Arduino: Электронные модули.
🎁 Купить весь комплект со скидкой 10%
Все 2 товара сразу в корзину: 148 ₽ 133 ₽ (экономия 15 ₽)
Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.
Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.