Подключение кнопки без подключения к контакту 5V
Существует два типа учебников для кнопок:
Я не понимаю, как работает кнопка на первом изображении. Мы просто надеемся, что есть какое-то ненулевое напряжение, и надеемся, что его достаточно? Я думаю, что первое изображение действительно плохое, но не могу объяснить почему.
@GrayR, 👍1
2 ответа
Лучший ответ:
Существует подтягивающий резистор, который вы не видите на диаграмме, потому что он является внутренним для Arduino. Я добавил его красным цветом. Чтобы сделать вывод 7 входным, вы можете написать:
digitalWrite(7, INPUT_PULLUP);
, который не только делает контакт входным, но и включает внутренний подтягивающий резистор ~ 20K.
Итак, вы правы насчет первой диаграммы - похоже, что контакт остался плавающим. Без кода или пояснительной записки подтягивающий резистор не документируется. В такой схеме, как только вы познакомитесь с процессором и узнаете, что на пин-драйверах есть дополнительные подтягивания, вы можете предположить, что будут использоваться дополнительные подтягивания.
Обновление: я нарисовал резистор, предполагая, что красная шина подключена к 5 В - я тоже должен был это сделать.
Цифровые контакты Arduino UNO, или, скорее, микроконтроллер AVR, используемый в UNO, имеют дополнительные внутренние подтягивающие резисторы, которые можно включить с помощью опции INPUT_PULLUP для
pinMode
. Когда вы используете INPUT_PULLUP
(в отличие от INPUT
), существует функциональный резистор где-то между 20 Ком и 50 Ком, подключенный между VCC ("5V") и цифровым выводом. Когда вы учитываете, что этот внутренний резистор включен, схемы в ваших двух изображениях являются структурно зеркальными отражениями друг друга:
Приведенные здесь числа в штучной упаковке предназначены только для того, чтобы уточнить, какие узлы в электрической схеме соответствуют каким узлам в схематическом представлении. Не спрашивайте, где ящик номер 5; это тайна. Я вырезал часть исходного второго изображения, так что новое соединение GND было нарисовано вручную.
На вашем первом изображении (слева) код должен был бы включить внутренний подтягивающий резистор, чтобы установить ВЫСОКОЕ
состояние по умолчанию на цифровом выводе. С включенным INPUT_PULLUP вы можете представить себе этот внутренний резистор при сравнении со вторым изображением (справа). Здесь я нарисовал символ резистора на плате, чтобы представить внутренний, когда он включен. Когда кнопка нажата, некоторый ток проходит через это внутреннее подтягивание, и напряжение на штифте падает на землю. Обратите внимание, что вы могли бы так же легко иметь там внешний резистор и использовать обычный
режим ввода.
Ваш второй пример изображения (справа) использует внешний понижающий резистор для установления НИЗКОГО
состояния по умолчанию. Поэтому, когда вы нажимаете кнопку, сигнал поднимается до 5V / VCC или ВЫСОКОГО
уровня, и некоторый ток протекает через понижающий резистор. Это будет использоваться с режимом ввода, а не
с INPUT_PULLUP
; Я не аннотировал внутреннее подтягивание справа, чтобы указать, что подтягивание не включено в этом сценарии (обычный режим ВВОДА). Обратите внимание, что если бы вы включили внутреннее подтягивание в этой второй конфигурации, оно образовало бы делитель напряжения с внешним подтягиванием; для внешнего изображения 10K это может привести к напряжению по умолчанию на выводе, которое только граничит с правильным
НИЗКИМ
значением.
Некоторые люди находят менее запутанным иметь ВЫСОКОЕ
состояние при нажатии кнопки, а также использование внешнего резистора, подобного этому, помогает объяснить концепцию наличия тянущего резистора в целом, потому что вы можете его видеть. Однако на практике приятно иметь возможность использовать внутренние резисторы, даже если они тянут в более запутанном направлении. Обратите внимание, что существуют микроконтроллеры с дополнительными внутренними понижающими резисторами, но они не так распространены; в частности, UNO их нет.
- Как переключить светодиод при нажатии кнопки?
- Определение того, была ли нажата и отпущена кнопка
- Нажать клавишу Windows, используя «keyboard.press();»
- Устранение дребезга кнопки с помощью прерывания
- Хорошая кнопка debouncing/Библиотека StateChange
- Напряжение меняется, но цифровой поток всегда HIGH
- Остановить мигание светодиодов
- Интеграция 2 кнопок для включения и выключения светодиода.
Просто обратите внимание, что при подтягивании сигнал инвертируется по сравнению с тем, когда вы используете подтягивание. То есть digitalRead будет возвращать НИЗКИЙ уровень, когда кнопка нажата, и ВЫСОКИЙ, когда она не нажата. Для новичка это может быть немного нелогично. Я думаю, именно поэтому многие учебные пособия используют этот метод. Он также показывает фактический резистор, вместо того чтобы использовать внутренний, который вы не видите. Как только вы поймете, как все работает, и как вы не должны оставлять штифты плавающими, вы, вероятно, в конечном итоге будете использовать метод внутреннего подтягивания, так как его легче подключить., @Gerben
Второе примечание: некоторые микроконтроллеры также имеют понижающие резисторы. В этом случае вы можете использовать оба метода, не добавляя резистор. Хотя при прокладке печатной платы часто проще подключить другую ножку кнопки к GND, а ту - к Vcc. Так что я бы все-таки предпочел метод подтягивания., @Gerben
Для таких инвертированных сигналов, как этот, я напоминаю себе в комментарии в конце строки, что сигнал активно-низкий, и часто я делаю имя условия сигнала, например PRESSED в данном случае, и
#define PRESSED LOW
. Как бы часто я ни пользовался встроенным подтягиванием, угадайте, кто все еще спотыкается о свой собственный код, быстро просматривая его!, @JRobert