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

Arduino повернення більше однієї змінної функції

Привіт друзі! З відео Arduino функції ми вже знаємо, що в функцію можна передавати багато змінних, а..

Радіатор 25х23х16мм

Радіатор 25х23х16мм

Радіатор алюмінієвий для транзисторів, симісторів ... з встановленням на друковану платуПофарбований..

17.24грн.

Змінне жало паяльника 900M-T 1шт.

Змінне жало паяльника 900M-T 1шт.

Жало для паяльника 60Вт з регуляторомДіаметр робочої частини 3 ммВнутрішній діаметр отвору під ..

34.24грн.

Пружина для натягування ременя 6мм

Пружина для натягування ременя 6мм

Стальна пружина для натягування зубчатого ременя GT2 шириною 6 ммВикористовується в 3d принтерах та ..

4.82грн.

AT24C02 EEPROM I2C

AT24C02 EEPROM I2C

Мікросхема постійної пам'яті EEPROMНапруга живлення 2,7 ... 5,5 ВОб'єм 256 БайтКоммунікація I2C..

4.54грн.