Модуль 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 разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
Статический IP адрес ESP8266

Статический IP адрес ESP8266

Как задать статический IP адрес контроллеру ESP8266?Будем рассматривать этот вопрос на примере ..

Моно усилитель мощности 18 Вт TDA2030A

Моно усилитель мощности 18 Вт TDA2030A

Модуль одноканального усилителя мощности звуковой частоты на основе легендарной микросхемы TDA2030A...

62.86грн.

Watchdog и таймеры ESP32

Watchdog и таймеры ESP32

Watchdog и таймеры ESP32 ESP32 оснащён встроенным Watchdog Timer (WDT), который используется для ..

Канифоль 10г

Канифоль 10г

Твердая канифоль для пайкиПрименяется как флюс при пайке свинцово-оловяным припоем..

41.95грн.

Стойка роликовая для оси X 2шт. с крепежом

Стойка роликовая для оси X 2шт. с крепежом

Монтажная панель из МДФ для организации оси Х автоматического лазерного гравера.Отверстия под шаговы..

167.68грн.