Выключатель. Тактовая кнопка
Теория
КОМПОНЕНТЫ
- Адресуемая светодиодная лента
- Геркон
- Диод
- Зуммер
- Кнопка
- Кварцевый резонатор
- Конденсатор
- Макетная плата
- Резистор
- Реле
- Светодиод
- Светодиодные индикаторы
- Сервопривод
- Симистор
- Транзистор
ARDUINO
- Что такое Arduino?
- Среда разработки Arduino IDE
- Сравнение плат Arduino. Какую выбрать?
- Как прошить плату Arduino с помощью другой Arduino (ArduinoISP)
- Онлайн-сервис TinkerCAD – эмулятор Arduino
- Визуальная среда разработки Mixly для Arduino
- Настройка поддержки чипа STM32F103C8T6 средой Arduino IDE
RASPBERRY
ИНТЕРФЕЙСЫ ПЕРЕДАЧИ ДАННЫХ
Выключатель — это прибор, который позволяет замыкать и размыкать электрическую цепь. При этом, смена состояния выключателя может происходить разными способами, в зависимости от типа устройства. Механические выключатели наиболее распространены, и используются непосредственно человеком.
К такому типу относятся различные тумблеры, кнопки, клавиши и рубильники. Электромагнитные и электронные, напротив, применяются в автоматических системах, и управляются при помощи электрических сигналов. Самым известным электромагнитным выключателем является реле. Примером электронного выключателя может служить транзистор.
Тактовая кнопка — простой, всем известный механизм, замыкающий цепь пока есть давление на толкатель. На изображении снизу показаны ножки кнопки, стрелки одного цвета предназначены для подключения. Когда кнопка нажата, пины, изображенные синими стрелками, соединяются с пинами, изображенными красными стрелками.

Кнопки с 4 контактами стоит рассматривать, как 2 пары рельс, которые соединяются при нажатии.

Эффект дребезга
При замыкании и размыкании между пластинами кнопки возникают микроискры, провоцирующие до десятка переключений за несколько миллисекунд. Явление называется дребезгом (англ. bounce). Это нужно учитывать, если необходимо фиксировать «клики».

Схема подключения
Подключать кнопку напрямую крайне не рекомендуется из-за дребезга контактов.

Пока кнопка нажата, выходное напряжение Vout = Vcc, но пока она отпущена, Vout ≠ 0. Кнопка и провода в этом случае работают как антенна, и Vout будет «шуметь», принимая случайные значения «из воздуха». Пока соединения нет, необходимо дать резервный, слабый путь, делающий напряжение определённым. Для этого используют резистор.
Схема с подтягивающим резистором


- Есть нажатие: Vout = 0
- Нет нажатия: Vout = Vcc
Схема со стягивающим резистором


- Есть нажатие: Vout = Vcc
- Нет нажатия: Vout = 0
Схема RC-цепи
(аппаратное решение дребезга контактов)

Таймер нажатия
(программное решение дребезга контактов)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
void setup() { Serial.begin(9600); pinMode(3, INPUT_PULLUP); } bool flag = false; uint32_t btnTimer = 0; void loop() { // читаем инвертированное значение для удобства bool btnState = !digitalRead(3); // время гашения дребезга примем 100 миллисекунд if (btnState && !flag && millis() - btnTimer > 100) { flag = true; btnTimer = millis(); Serial.println("press"); } if (!btnState && flag && millis() - btnTimer > 100) { flag = false; btnTimer = millis(); //Serial.println("release"); } } |