Input против input_pullup
Я новичок в Arduino и не могу понять некоторые вещи. Как работает входной вывод в Arduino? Я хочу установить один из выводов в качестве входного. Когда я должен использовать input и когда input_pullup? В чем разница между ними?
@Macios216, 👍2
Обсуждение2 ответа
Рабочий входной штифт-
Входной вывод на плате arduino использует нечто, называемое буфером Tristate, чтобы ожидать напряжения на выводе.
Входное подтягивание-
Когда вывод сконфигурирован просто как вход (без определенного напряжения, подключенного к нему), вывод будет возвращать случайные значения, основанные на электрических помехах, присутствующих вокруг него, например, на соседнем выводе.
Поэтому для решения этой проблемы используются входные подтягивания. По сути, он устанавливает состояние вывода по умолчанию на ВЫСОКОЕ или 1, чтобы на вывод не влияли помехи.
Вы можете испытать это самостоятельно, используя следующую программу, с помощью кнопки от заземления до контакта 7 и последовательного монитора-
Никакого подтягивания-
void setup(){
// Не нужно указывать здесь какие-либо определения контакта, так как по умолчанию он вводит
// Этот код будет возвращать случайные значения до тех пор, пока кнопка не будет нажата
Serial.begin(9600);
}
void loop(){
Serial.println(digitalRead(7));
}
Теперь для того, кто с подтягиванием-
void setup(){
pinMode(7, INPUT_PULLUP);
Serial.begin(9600);
// Этот код будет возвращать 1/МАКСИМУМ до тех пор, пока кнопка не будет нажата
}
void loop(){
Serial.println(digitalRead(7));
}
Случайная информация - На некоторых платах есть выпадающий список ввода, угадайте, что это делает?
Контактные входы достаточно чувствительны к близлежащим электрическим помехам, поэтому, если контакт плавает - не подтянут положительно к напряжению питания или не заземлен - вход будет считываться случайным образом с ВЫСОКИМ или НИЗКИМ значением. Подтягивающий резистор 10 Ком или около того, подключенный между выводом и напряжением питания, достаточно силен, чтобы преодолеть шум, но сам по себе легко преодолевается сигналом, подаваемым на вход вывода:
Это означает, что когда вывод не подключен, он будет иметь стабильное ВЫСОКОЕ значение. В то время как вы можете разместить подтяжку на своей печатной плате, как показано на схеме выше, у ардуино есть встроенный подтягивающий резистор, который можно подключить к контакту, просто выбрав "INPUT_PULLUP" в вашем коде, и он делает точно то же самое. Это удобный способ сэкономить место и компонент на вашей печатной плате или немного ускорить подключение макета. И в случае с макетной платой, в частности, подключаемые провода являются отличными антеннами для улавливания шума, в то время как встроенный съемный резистор находится внутри чипа, закрывает контактный приемник, и это делает схему значительно более стабильной.
- NodeMCU - Vin контакт как выход 5V?
- Использовать все контакты как цифровые входы/выходы
- Что такое ICSP pin (разъём)?
- Сколько датчиков может поддерживать один модуль Arduino?
- NodeMCU - использовать кнопку flash в качестве входного сигнала в loop()
- Какой тип разъема использует система GROVE?
- Неиспользуемые контакты в Arduino L293D motor shield?
- Как выбрать вывод передачи в библиотеке IRremote для Arduino Uno?
Довольно поздний комментарий, но я удивлен, что больше людей не задавали этот вопрос раньше, подобно тому, как МНОГИЕ люди спрашивали о миллисе..., @Coder9390