Модуль 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); // Внутрішня підтяжка
  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 размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре

..

0.00грн.

Модуль годинника реального часу DS1302

Модуль годинника реального часу DS1302

Модуль годин реального часу на основі мікросхеми DS1302 призначений для роботи з контролерами Ardu..

50.25грн.

Шилд 2 реле для Arduino NANO

Шилд 2 реле для Arduino NANO

Шилд для проектів з двома електромеханічними реле під контролер Arduino NANO. Полегшує монтаж та заб..

257.82грн.

Набір перетинок (мама-мама) 40шт 20см

Набір перетинок (мама-мама) 40шт 20см

Набір з"єднувальних дротів для поєднання плат контролера з периферією без пайки. Підходять під станд..

88.83грн.