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

Шарніри під обертальну вісь 8, 10 мм 2шт.

Такі шарніри призначені для кріплення вісі черв'ячної передачі на будь-якій з трьох осей переміщення..

164.87грн.

Arduino відображення даних FLOAT

Arduino відображення даних FLOAT

Arduino відображення даних FLOATСхоже, що програмне забезпечення Arduino не особливо підтримує відоб..

Симістор BTA12-600B

Симістор BTA12-600B

Високовольтний симістор.Максимальний струм навантаження за повної синусоїди 12 АМаксимальний струм к..

15.42грн.

Гвинт М2х20мм оцинкований

Гвинт М2х20мм оцинкований

Гвинт оцинкований з різьбою М2 для кріплення елементів любительських проектівДовжина різьби 20 мм..

3.68грн.

АЦП ADS1115 огляд мікросхеми

АЦП ADS1115 огляд мікросхеми

Привіт, друзі! У нас на огляді дуже корисна мікросхема – ADS1115. Це 16-бітний аналогово-цифровий пе..