Arduino:Примеры/Debounce2
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Антидребезг2
Данный пример демонстрирует как программно бороться с дребезгом контактов.
Алгоритм:
- Вначале мы устанавливаем предыдущее и текущее состояние кнопки как LOW;
- Считываем состояние кнопки;
- Если текущее и предыдущее состояние кнопки отличаются, ждем 5 мс;
- Считываем состояние кнопки и делаем его текущим;
- Если предыдущее состояние кнопки было LOW, а текущее состояние HIGH, переключаем состояние светодиода;
- Сохраняем текущее состояние кнопки как предыдущее состояние;
- Повторяем цикл со 2 шага;
Необходимое оборудование
- Плата Arduino - 1 шт.
- Кнопка или переключатель - 1шт.
- Резистор на 220 Ом - 1шт.
- Резистор на 10 кОм - 1шт.
- Макетная плата - 1шт.
- Провода-перемычки;
Цепь
Соедините 9 цифровой контакт Arduino с одной из ног резистор на 220 Ом, вторую ногу резистора соедините с анодом(длинная ножка) светодиода, катод(маленькая ножка) светодиода соедините с землей(GND). Соедините 2 цифровой контакт Arduino с одной из ног стягивающего резистора на 10 кОм и одним из контактов кнопки, вторую ногу резистора соедините с землей(GND). Второй контакт кнопки соедините с контактом 5V.
Теперь, допустим, что на кнопку никто не нажимает – в этом случае связи между ногами кнопки не будет, поэтому 2-ой цифровой контакт будет по-прежнему подсоединен к «земле», и Arduino сочтет эту ситуацию как LOW. Теперь, допустим, на кнопку все же кто-то нажимает – это создает связь между обоими ногами, тем самым соединяя 2-ой цифровой и 5-вольтовый контакты, и Arduino сочтет эту ситуацию как HIGH.
Если отсоединить цифровой контакт ото всего, то светодиод примется хаотично мигать. Это значит, что выходное значение будет «плавающим», т.е. беспорядочно переключающимся из LOW в HIGH и наоборот. Именно поэтому в цепи и нужны стягивающие/подтягивающие резисторы.
Код
#define LED 9 //светодиод подключаем к 9 выводу
#define BUTTON 2 //кнопку подключаем ко 2 выводу
boolean lastButton = LOW; //переменная для сохранения предыдущего состояния кнопки
boolean currentButton = LOW; //переменная для сохранения текущего состояния кнопки
boolean ledOn = false; //текущее состояние светодиода (вкл./выкл.)
void setup()
{
pinMode (LED, OUTPUT); //конфигурируем контакт подключенный к светодиоду как выход
pinMode (BUTTON, INPUT); //конфигурируем контакт подключенный к кнопке как вход(необязательно)
}
void loop()
{
currentButton = debounce(lastButton); //считываем состояние кнопки с применением "антидребезга"
if (lastButton == LOW && currentButton == HIGH) //если кнопка была нажата
{
ledOn = !ledOn; //инвертируем значение переменной состояния светодиода
}
lastButton = currentButton; //сохраняем текущее состояние кнопки в предыдущее
digitalWrite(LED, ledOn); //изменяем статус светодиода
}
/*
* Функция антидребезга
* принимает предыдущее значение кнопки и возвращает текущее состояние кнопки с подавлением дребезга контактов
*/
boolean debounce(boolean last)
{
boolean current = digitalRead(BUTTON); //считываем состояние кнопки
if (last != current) //если есть изменения
{
delay(5); //ждем 5мс
current = digitalRead(BUTTON); //считываем состояние кнопки
}
return current; //возвращаем, считанное состояние кнопки
}
См.также
Внешние ссылки
Arduino продукты | |
---|---|
Начальный уровень | Arduino Uno • Arduino Leonardo • Arduino 101 • Arduino Robot • Arduino Esplora • Arduino Micro • Arduino Nano • Arduino Mini • Arduino Starter Kit • Arduino Basic Kit • MKR2UNO • TFT-дисплей Arduino |
Продвинутые функции | Arduino Mega 2560 • Arduino Zero • Arduino Due • Arduino Mega ADK • Arduino Pro • Arduino Motor Shield • Arduino USB Host Shield • Arduino Proto Shield • MKR Proto Shield • MKR Proto Large Shield • Arduino ISP • Arduino USB 2 Serial Micro • Arduino Mini USB Serial Adapter |
Интернет вещей | Arduino Yun • Arduino Ethernet • Arduino MKR1000 • Arduino WiFi 101 Shield • Arduino GSM Shield V2 • Arduino WiFi Shield • Arduino Wireless SD Shield • Arduino Wireless Proto Shield • Arduino Ethernet Shield V2 • Arduino Yun Shield • Arduino MKR1000 Bundle |
Носимые устройства | Arduino Gemma • Lilypad Arduino Simple • Lilypad Arduino Main Board • Lilypad Arduino USB • LilyPad Arduino SimpleSnap |
3D-печать | Arduino Materia 101 |
Устаревшие устройства | - |
Примеры Arduino | |
---|---|
Стандартные функции | |
Основы |
|
Цифровой сигнал |
|
Аналоговый сигнал |
|
Связь |
|
Управляющие структуры |
|
Датчики |
|
Дисплей |
Примеры, объясняющие основы управления дисплеем:
|
Строки |
|
USB (для Leonardo, Micro и Due плат) |
В этой секции имеют место примеры, которые демонстрируют использование библиотек, уникальных для плат Leonardo, Micro и Due.
|
Клавиатура |
|
Мышь |
|
Разное |
- Страницы, использующие повторяющиеся аргументы в вызовах шаблонов
- Справочник языка Arduino
- Arduino
- Проверка:myagkij
- Оформление:myagkij
- Редактирование:myagkij
- Страницы, где используется шаблон "Навигационная таблица/Телепорт"
- Страницы с телепортом
- Пример
- Примеры
- Пример программирования Arduino
- Примеры программирования Arduino