Arduino:Примеры/Debounce2: различия между версиями
Myagkij (обсуждение | вклад) Нет описания правки |
Нет описания правки |
||
(не показано 6 промежуточных версий 1 участника) | |||
Строка 1: | Строка 1: | ||
{{Arduino панель перехода}} | {{Arduino панель перехода}} | ||
{{Myagkij-редактор}} | {{Myagkij-редактор}} | ||
= Антидребезг2= | = Антидребезг2= | ||
Данный пример демонстрирует как программно бороться с дребезгом контактов. | Данный пример демонстрирует как программно бороться с [[дребезгом контактов]]. | ||
'''Алгоритм:''' | '''Алгоритм:''' | ||
# Вначале мы устанавливаем предыдущее и текущее состояние кнопки как [[Arduino:Справочник языка Arduino/Константы/LOW|LOW]]; | # Вначале мы устанавливаем предыдущее и текущее состояние кнопки как [[Arduino:Справочник языка Arduino/Константы/LOW|LOW]]; | ||
# Считываем состояние кнопки; | # Считываем состояние кнопки; | ||
# Если текущее и предыдущее состояние кнопки отличаются, ждем | # Если текущее и предыдущее состояние кнопки отличаются, ждем 5 мс; | ||
# Считываем состояние кнопки и делаем его текущим; | # Считываем состояние кнопки и делаем его текущим; | ||
# Если предыдущее состояние кнопки было [[Arduino:Справочник языка Arduino/Константы/LOW|LOW]], а текущее состояние [[Arduino:Справочник языка Arduino/Константы/HIGH|HIGH]], переключаем состояние | # Если предыдущее состояние кнопки было [[Arduino:Справочник языка Arduino/Константы/LOW|LOW]], а текущее состояние [[Arduino:Справочник языка Arduino/Константы/HIGH|HIGH]], переключаем состояние [[светодиод]]а; | ||
# Сохраняем текущее состояние кнопки как предыдущее состояние; | # Сохраняем текущее состояние кнопки как предыдущее состояние; | ||
# Повторяем цикл со | # Повторяем цикл со 2 шага; | ||
== Необходимое оборудование == | == Необходимое оборудование == | ||
* [[Arduino:Продукты/Продукты Arduino|Плата Arduino]] | * [[Arduino:Продукты/Продукты Arduino|Плата Arduino]] - 1 шт. | ||
* Кнопка или переключатель | * Кнопка или переключатель - 1шт. | ||
* Резистор на | * [[Резистор]] на [[220 Ом]] - 1шт. | ||
* Резистор на | * [[Резистор]] на [[10 кОм]] - 1шт. | ||
* Макетная плата | * [[Макетная плата]] - 1шт. | ||
* Провода-перемычки; | * Провода-перемычки; | ||
== Цепь == | == Цепь == | ||
Соедините | Соедините 9 цифровой контакт [[Arduino]] с одной из ног [[резистор]] на [[220 Ом]], вторую ногу [[резистор]]а соедините с анодом(длинная ножка) [[светодиод]]а, катод(маленькая ножка) [[светодиод]]а соедините с землей(GND). Соедините 2 цифровой контакт [[Arduino]] с одной из ног [[стягивающего резистора]] на [[10 кОм]] и одним из контактов кнопки, вторую ногу [[резистор]]а соедините с землей(GND). Второй контакт кнопки соедините с контактом 5V. | ||
Теперь, допустим, что на кнопку никто не нажимает – в этом случае связи между ногами кнопки не будет, поэтому | Теперь, допустим, что на кнопку никто не нажимает – в этом случае связи между ногами кнопки не будет, поэтому 2-ой цифровой контакт будет по-прежнему подсоединен к ''«земле»'', и [[Arduino]] сочтет эту ситуацию как [[Arduino:Справочник языка Arduino/Константы/LOW|LOW]]. Теперь, допустим, на кнопку все же кто-то нажимает – это создает связь между обоими ногами, тем самым соединяя 2-ой цифровой и 5-вольтовый контакты, и [[Arduino]] сочтет эту ситуацию как [[Arduino:Справочник языка Arduino/Константы/HIGH|HIGH]]. | ||
Если отсоединить цифровой контакт ото всего, то светодиод примется хаотично мигать. Это значит, что выходное значение будет | Если отсоединить цифровой контакт ото всего, то [[светодиод]] примется хаотично мигать. Это значит, что выходное значение будет ''«плавающим»'', т.е. беспорядочно переключающимся из [[Arduino:Справочник языка Arduino/Константы/LOW|LOW]] в [[Arduino:Справочник языка Arduino/Константы/HIGH|HIGH]] и наоборот. Именно поэтому в цепи и нужны стягивающие/[[подтягивающие резисторы]]. | ||
[[File:arduino_uno_debounce2.png|center|800px]] | [[File:arduino_uno_debounce2.png|center|thumb|800px|'''Рис. 1.''' [[Плата Arduino]] с подключенной кнопкой и [[светодиод]]ом.|alt=Рис. 1. Плата Arduino с подключенной кнопкой и светодиодом.]] | ||
== Код == | == Код == | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
#define LED 9 //светодиод подключаем к 9 выводу | #define LED 9 //светодиод подключаем к 9 выводу | ||
#define BUTTON 2 //кнопку подключаем ко 2 выводу | #define BUTTON 2 //кнопку подключаем ко 2 выводу | ||
Строка 96: | Строка 94: | ||
<references /> | <references /> | ||
{{Навигационная таблица/ | {{Навигационная таблица/Портал/Arduino}} | ||
[[Категория:Пример]] | [[Категория:Пример]] |
Текущая версия от 18:18, 14 мая 2023
Содержание | Знакомство с 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