На новых Arduinos можно установить pinMode в одном из трех состояний: OUTPUT, INPUT, и INPUT_PULLUP.
На этой странице написано:
Чип Atmega на Arduino имеет внутренние подтягивающие резисторы (резисторы, которые подключаются к источнику питания внутри), к которым вы можете получить доступ. Если вы предпочитаете использовать их вместо внешних понижающих резисторов, вы можете использовать аргумент INPUT_PULLUP в pinMode (). Это эффективно инвертирует поведение, где HIGH означает, что датчик выключен, а LOW означает, что датчик включен.
Я скорее уверен, что инвертирование поведения - это не единственное, что он делает.
Что делает INPUT_PULLUP? Чем он отличается INPUTи как решить, какой из них использовать?