Модуль 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 размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре
Аналоговий джойстик JH-D202X 2D (5 кОм, вологозахищений)

Аналоговий джойстик JH-D202X 2D (5 кОм, вологозахищений)

Джойстик JH-D202X-R2/R4 — це надійний аналоговий 2D джойстик з двома потенціометрами по 5 кОм, призн..

613.52грн.

Кінцевик оптичний безконтактний

Кінцевик оптичний безконтактний

Датчик працює на основі відкритої оптопари. Спрацьовує при появі непрозорого об'єкту в розрізі між в..

31.94грн.

Модуль датчика відстані TCRT5000

Модуль датчика відстані TCRT5000

Модуль для вимірювання відстані за інтенсивністю відбиття інфрачервоного променя від об'єкту.Має дис..

28.30грн.

Arduino UNO як осцилограф

Arduino UNO як осцилограф

Контролери Arduino можна використовувати як найпростіший осцилограф, для спостерігання за швидко-змі..

Трансформатор струму 0-50А

Трансформатор струму 0-50А

Трансформатор струму призначений для вимірювання сили змінного струму, що тече через дріт. Для підкл..

77.82грн.