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

Модуль розширення входів-виходів 4 реле та 4 DI I2C

Цікавий модуль розширення 4-х входів та 4 релейних виходів з комунікацією I2C на основі мікросхеми M..

475.88грн.

Лінійний кроковий двигун - що це?

Лінійний кроковий двигун - що це?

Лінійний кроковий двигун Привіт друзі! Мені випала вдала можливість познайомити вас з, що розрива..

Блок живлення 12 В 5 А ноутбучний

Блок живлення 12 В 5 А ноутбучний

Вхідна напруга змінного струму 165...240 В 50/60 ГцВихідна стабілізована напруга 12 ВМаксимальний ст..

290.18грн.

Модуль 8 PWM виходів I2C на DIN-рейку без корпусу

Модуль 8 PWM виходів I2C на DIN-рейку без корпусу

Модуль продається без коробкиМодуль восьми ШІМ виходів I2C для побудови домашньої чи промислової сис..

971.42грн.

Мініатюрний  WeMos D1 mini ESP8266

Мініатюрний WeMos D1 mini ESP8266

Дуже маленька і дешева плата WeMos D1 mini контролера з WiFi зв'язком на борту. Має не багато в..

112.31грн.