Модуль 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 і регулятор яскравості
Контрольні запитання
- У чому різниця між цифровими входами і виходами?
- Чим відрізняються pull-up і pull-down резистори?
- Що таке брязкіт кнопки та як із ним боротися?
- Як зробити кнопку-перемикач в Arduino?
Авторський курс по Arduino для початківців. Використання матеріалів на комерційних сайтах допускається з вказанням джерела.





