Модуль 3 — Работа с цифровыми сигналами (курс для начинающих)

Цель модуля: понять, как работают цифровые входы и выходы Arduino, узнать о подтягивающих резисторах (pull-up и pull-down), научиться устранять дребезг кнопки и создать проект «Кнопка-переключатель».


Порты ввода/вывода (digital)

Цифровые порты Arduino могут работать в двух режимах:

  • Вход (INPUT) — порт считывает логический уровень: HIGH (1) или LOW (0).
  • Выход (OUTPUT) — порт устанавливает логический уровень: HIGH подаёт напряжение (обычно 5 В или 3,3 В), LOW соединяет с землёй (GND).

Цифровые входы используются для подключения кнопок, датчиков и других устройств, которые передают сигнал в виде двух состояний. Выходы управляют светодиодами, реле, моторами и т. д.

Pull-up и pull-down резисторы

Чтобы цифровой вход корректно считывал состояние, его нужно «привязать» к логическому уровню в неактивном состоянии. Для этого используют подтягивающие резисторы:

  • Pull-up — подтягивает вход к HIGH (Vcc) через резистор. Когда кнопка замыкается на землю, уровень становится LOW.
  • Pull-down — подтягивает вход к LOW (GND). Когда кнопка замыкается на питание, уровень становится HIGH.

В Arduino есть встроенные подтягивающие резисторы (около 20–50 кОм), которые можно включить с помощью INPUT_PULLUP в pinMode().

Обработка дребезга кнопки

При нажатии механической кнопки контакты замыкаются не мгновенно — они подскакивают и несколько миллисекунд «дребезжат». Это может вызвать ложные срабатывания.

Методы борьбы с дребезгом:

  • Программная задержка (игнорирование изменений в течение 20–50 мс).
  • Аппаратная фильтрация — RC-цепочка (резистор + конденсатор).
  • Использование готовых библиотек (например, Bounce2).

Практика

Использование внутреннего pull-up Arduino

Подключение кнопки:

  • Один контакт кнопки → пин 2.
  • Другой контакт кнопки → GND.

В коде используем INPUT_PULLUP. Нажатая кнопка даст LOW.

Программа: включение/выключение светодиода по кнопке

const int buttonPin = 2;
const int ledPin = 13;

void setup() {
  pinMode(buttonPin, INPUT_PULLUP); // Внутренний pull-up
  pinMode(ledPin, OUTPUT);
}

void loop() {
  if (digitalRead(buttonPin) == LOW) {
    digitalWrite(ledPin, HIGH);
  } else {
    digitalWrite(ledPin, LOW);
  }
}

Проект: «Кнопка-переключатель»

Задача: при каждом нажатии кнопки переключать состояние светодиода: одно нажатие — включить, другое — выключить.

Реализуем с защитой от дребезга программным методом.

const int buttonPin = 2;
const int ledPin = 13;

bool ledState = false;
bool lastButtonState = HIGH;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;

void setup() {
  pinMode(buttonPin, INPUT_PULLUP);
  pinMode(ledPin, OUTPUT);
}

void loop() {
  int reading = digitalRead(buttonPin);

  if (reading != lastButtonState) {
    lastDebounceTime = millis();
  }

  if ((millis() - lastDebounceTime) > debounceDelay) {
    if (reading == LOW && lastButtonState == HIGH) {
      ledState = !ledState;
      digitalWrite(ledPin, ledState);
    }
  }

  lastButtonState = reading;
}

Типичные ошибки

  • Подключение кнопки без резистора подтяжки — вход «плавает» и даёт случайные срабатывания.
  • Неправильная логика: забыли, что при INPUT_PULLUP нажатие даёт LOW.
  • Отсутствие защиты от дребезга — светодиод мигает или переключается несколько раз за одно нажатие.

Что дальше

В следующем модуле мы изучим Модуль 4 — Аналоговые сигналы: ADC, PWM и регулятор яркости


Контрольные вопросы

  1. В чём разница между цифровыми входами и выходами?
  2. Чем отличаются pull-up и pull-down резисторы?
  3. Что такое дребезг кнопки и как с ним бороться?
  4. Как сделать кнопку-переключатель в Arduino?

Авторский курс по Arduino для начинающих. Использование материалов на коммерческих сайтах допускается с указанием источника.

<< Проекты << Все товары >> Статьи, уроки >>

Написать отзыв

Примечание: HTML разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
Линейный шаговый двигатель - что это?

Линейный шаговый двигатель - что это?

Линейный шаговый двигатель Привет, друзья! Мне выпала удачная возможность познакомить вас с, разр..

Ниодимовый магнит 12mm x 3mm N35

Ниодимовый магнит 12mm x 3mm N35

Цилиндрический ниодимовый магнит N35Размеры 12мм x 3ммИдеально подходит для работы в связке с магнит..

14.00грн.

Arduino SPI: Полное руководство по последовательной шине Serial Peripheral Interface

Arduino SPI: Полное руководство по последовательной шине Serial Peripheral Interface

Arduino SPI: Полное руководство по последовательной шине Serial Peripheral Interface SPI ..

ESP32 LED PWM: управление яркостью светодиодов LEDC

ESP32 LED PWM: управление яркостью светодиодов LEDC

ESP32 LED PWM Controller: управление яркостью светодиодов ESP32 имеет встроенный модуль LED..

Модуль 8 — Финальный проект Arduino: идеи и сборка

Модуль 8 — Финальный проект Arduino: идеи и сборка

Модуль 8 — Финальный проект (курс для начинающих) Цель модуля: применить все полученные знани..