- Головна
- Проект 2: Обробляємо натискання кнопки на прикладі запалювання світлодіода
Проект 2: Обробляємо натискання кнопки на прикладі запалювання світлодіода
Це експеримент по роботі з кнопкою. Ми будемо включати світлодіод після натиснення кнопки і вимикати по відпуску кнопки. Розглянемо поняття брязкоту і програмні методи його усунення.
В даному експерименті ми будемо використовувати контакт D2 Arduino в якості входу. Це дозволяє підключити до нього кнопку для взаємодії з проектом в режимі реального часу. При використанні Arduino як входи використовують pull-up- і pulldown-резистори, щоб вхід Arduino не перебувала в «підвішеному» стані (в цьому стані він буде збирати зовнішні наводки і приймати довільні значення), а мав заздалегідь відоме стан (0 або 1 ). Резистори pull-up підтягують вхід до харчування +5 В, pull-down-резистори підтягують вхід до GND. Крім цього, pull-up- і pull-down-резистори гарантують, що кнопка не створить короткого замикання між +5 В і землею при натисканні. У нашому експерименті для підключення кнопки ми будемо використовувати pulldown-резистор. Схема підключення представлена на рис. 2.1.
Мал. 2.1. Схема підключення кнопки і світлодіоди
Коли кнопка відключена, вхід D2 буде підтягнутий до «землі» через резистор номіналом 10 кОм, який буде обмежувати потік струму, і на вхідному контакті буде встановлено значення напруги LOW. При натисканні на кнопку вхідний контакт безпосередньо пов'язаний з 5 В. Більша частина струму буде протікати по шляху найменшого опору через замкнуту кнопку, і на вході генерується рівень HIGH. При натисканні на кнопку включаємо світлодіод, при відпуску - гасимо.
Код даного скетчу приведений в лістингу 2.1.
1. Довгу ніжку світлодіода (анод) підключаємо до цифрового висновку D10 Arduino, іншу (катод) - через резистор 220 Ом до висновку GND (див. Рис. 2.1).
2. Один вхід кнопки підключаємо до +5 В, інший - через резистор 10 кОм до GND, вихід кнопки підключаємо до входу D2 Arduino (див. Рис. 2.1).
3. Завантажуємо в плату Arduino скетч з лістингу 2.1.
4. При натисканні на кнопку світлодіод повинен горіти, при відпуску - згаснути.
Ускладнити завдання - будемо перемикати стан світлодіода (включений / виключений) при кожному натисканні кнопки. Завантажимо на плату Arduino скетч з лістингу 2.2.
При натисканні кнопки світлодіод повинен змінювати свій стан. Але це буде відбуватися не завжди. Виною тому - брязкіт кнопок.
Кнопки вдають із себе механічні пристрої з системою пружинного контакту. Коли ви натискаєте на кнопку вниз, сигнал не просто змінюється від низького до високого, він протягом декількох мілісекунд змінює значення від одного до іншого, перш ніж контакти щільно стикнуться і встановиться значення HIGH.
Мікроконтролер зафіксує всі ці натискання, тому що брязкіт не відрізняється від справжнього натискання на кнопку. Усунути вплив брязкоту можна програмно. Алгоритм наступний:
1. cохраняющим попередній стан кнопки і поточний стан кнопки (при ініціалізації LOW).
2. Cчітиваем поточний стан кнопки.
3. Якщо поточний стан кнопки відрізняється від попереднього стану кнопки, чекаємо 5 мс, тому що кнопка, можливо, змінила стан.
4. Після 5 мс зчитуємо стан кнопки і використовуємо його в якості поточного стану кнопки.
5. Якщо попередній стан кнопки було LOW, а поточний стан кнопки HIGH, перемикаємо стан світлодіода.
6. Встановлюємо попередній стан кнопки для поточного стану кнопки.
7. Повернення до кроку 2. Додаємо до нашого скетчу підпрограму усунення брязкоту.
Отримуємо код, показаний в лістингу 2.3.
Завантажуємо скетч в плату Arduino і перевіряємо роботу. Тепер все працює нормально, кожне натискання кнопки змінює стану світлодіода.