Arduino.ru
Требуется подключить кнопку, и слушать ее состояние, обычно она замкнута, по обычной схеме, как я понял рекомендуется возврат с кнопки (который входит в ногу (D2)) подтянуть к GND через резистор 2,2-10кОм. Но вроде можно сконфигурировать pullup программно?
pinMode(pin, INPUT); аdigitalWrite(pin, LOW);
Можно ли так пользоваться, или не зря рисуют отдельный резистор?
P.S. Arduino Nano
- Войдите на сайт для отправки комментариев
Чт, 03/07/2014 — 14:54
Зарегистрирован: 03.07.2014
Задачу решил по другому:
Кнопку подключил к GND и D2 и сделал pullup к 5В, теперь при замыкании она падает в 0, а резистора pullup имхо хватит для КЗ между GND и 5В
pinMode(pin, INPUT); digitalWrite(pin, HIGH);
P.S. комментарии бы всё же послушал, мало ли ошибаюсь
- Войдите на сайт для отправки комментариев
Чт, 03/07/2014 — 15:05
Зарегистрирован: 29.09.2011
А что тут комментировать? Стандартное использование подтягивающего резистора. Стандартней не придумаешь. Вообщем-то на этом примере и объясняют зачем нужен встроенный подтягивающий. Да и в любом детальном тутореале про кнопки это есть. Скажем в прикрепленной ветке для новичков про кнопки.
Непонятно только зачем вы обозвали это » хватит для КЗ между GND и 5В», так как его предназначение прямо противоположное: cделать подтяжку, но что-бы небыло КЗ в момент нажатия кнопки. C чем он багополучно справляется.
КЗ — это уже аварийное состояние. Это когда можно попалить дуину, USB порт и т.п. И у вас тут его — явно не будет.
Ну разве что pinMode(pin,INPUT) — не обязательно. По умолчанию пины и так на вход включены. Но. лично я тоже предпочитаю лишний раз написать pinMode. Не экономитьп пару нажатий клавиатуры. Явно видно по коду что это вход, и если случайно, где-то выше он включался на OUTPUT — меньше рисков.
- Войдите на сайт для отправки комментариев
Работа с Arduino

Наткнулся тут на механизм неявного управления подтягивающими резисторами. Нужно указать в функции pinMode режим INPUT_PULLUP.
Подтягивающий резистор — резистор, включенный между проводником, по которому распространяется электрический сигнал, и питанием, либо между проводником и землей.
Подтягивающий резистор нужен, чтобы гарантировать на логическом входе, с которым соединен проводник, высокий (в первом случае) либо низкий (во втором случае) уровень в случаях:
- проводник не соединен с логическим выходом
- присоединённый логический выход находится в высокоимпедансном состоянии.
- когда разомкнут ключевой элемент на присоединённом логическом выходе, который устроен, как открытый вывод ключевого элемента. Ключевым элементом может быть полевой или биполярный транзистор, а открытым выводом — коллектор, эммитер, сток или исток.
Подтягивающий резистор образует цепь, обеспечивающую подтяжку сигнала к питанию либо к земле. В первом случае подтяжка называется подтяжкой к питанию, во втором — подтяжкой к земле.
На arduino.ru на текущий момент информации об этом режиме нет, зато есть на оф сайте arduino.cc
Pins Configured as INPUT_PULLUP
The Atmega chip on the Arduino has internal pull-up resistors (resistors that connect to power internally) that you can access. If you prefer to use these instead of external pull-down resistors, you can use the INPUT_PULLUP argument in pinMode(). This effectively inverts the behavior, where HIGH means the sensor is off, and LOW means the sensor is on. See the Input Pullup Serial tutorial for an example of this in use.
Подтягивающие (нагрузочные) резисторы
Если на порт ввода не поступает сигнал, то в данном случае рекомендуется задать порту известное состояние. Это делается добавлением подтягивающих резисторов 10 кОм, подключающих вход либо к +5 В (подтягивающие к питанию резисторы), либо к земле (подтягивающие к земле резисторы).
Микроконтроллер Atmega имеет программируемые встроенные подтягивающие к питанию резисторы 20 кОм.
Пример кода(При нажатии кнопки включаем встроенный светодиод на выводе 13):
int btnPin = 7;
int ledPin = 13;
boolean signal = false;
void setup()
pinMode(btnPin, INPUT_PULLUP);
>
void loop()
signal = digitalRead(btnPin);
signal = !signal;
delay(31);
digitalWrite(ledPin, signal);
>
input pullup arduino кнопка
Данный код демонстрирует использование режима INPUT_PULLUP с функцией pinMode() и мониторинг состояния переключателя с установлением связи по серийному порту между Arduino и компьютером через USB соединение.
Кроме того, при высоком уровне входного сигнала встроенный светодиод, подключенный к пину 13, включается, а при низком уровне светодиод выключается.
Нам понадобятся:
- Плата Arduino.
- Кнопка или переключатель.
- Макетная плата.
- Провода для подключения.
Подключение:

Подсоедините два провода к плате Arduino.
Черный провод соединяет землю с одной ножкой кнопки.
Второй провод идет от цифрового пина 2 к другой ножке кнопки.
При нажатии на кнопку устанавливается соединение между двумя ножками кнопки.
Когда кнопка не нажата (разомкнута), между двумя ножками кнопки нет соединения.
Поскольку внутренний резистор подтяжки на пине 2 активен и подключен к 5 В, мы считываем HIGH, когда кнопка не нажата.
Когда кнопка нажата (замкнута), Arduino считывает LOW, так как устанавливается соединение с землей.

Схема:
Код:
В программе ниже первое, что вы делаете в функции setup(), — начать последовательную связь со скоростью 9600 бит в секунду между Arduino и компьютером с помощью строки:
Serial.begin(9600);
Затем инициализируйте цифровой пин 2 как вход, с включенным внутренним резистором подтяжки:
pinMode(2, INPUT_PULLUP);
Следующая строка делает пин 13, с встроенным светодиодом, выходом:
pinMode(13, OUTPUT);
Теперь, когда настройка завершена, перейдите в основной цикл вашего кода.
Когда ваша кнопка не нажата, внутренний резистор подтяжки соединен с 5 вольтами.
Это заставляет Arduino возвращать «1» или HIGH.
Когда кнопка нажата, пин Arduino подтягивается к земле, из-за чего Arduino возвращает «0» или LOW.
Первое, что вам нужно сделать в основном цикле вашей программы, это создать переменную для хранения информации, поступающей от вашего переключателя.
Поскольку информация, поступающая от переключателя, может быть либо «1», либо «0», вы можете использовать переменную int.
Назовите эту переменную sensorValue и установите ее равной значению, считанному с цифрового пина 2.
Все это можно сделать всего одной строкой кода:
int sensorValue = digitalRead(2);
После того как Arduino считала входные данные, она выводит эту информацию обратно на компьютер в виде десятичного (DEC) значения с помощью команды Serial.println() в последней строке кода:
Serial.println(sensorValue, DEC);
Теперь, когда вы откроете монитор порта (Serial Monitor) в среде Arduino IDE, вы увидите значения «0», если кнопка нажата, или «1», если кнопка не нажата.
Светодиод на пине 13 будет гореть, когда переключатель находится в состоянии HIGH, и выключаться при состоянии LOW.
/*
Pull-up
Этот пример демонстрирует использование pinMode(INPUT_PULLUP). Он считывает значения с цифрового
входа, с пина 2, и выводит результаты в монитор последовательного порта.
Схема подключения:
— кнопка подключена от пина 2 к земле
— встроенный светодиод на пине 13
В отличие от pinMode(INPUT), здесь не требуется подтягивающий резистор. Внутренний
резистор 20КОм подключен к 5 В. Эта конфигурация заставляет вход считывать
HIGH, когда кнопка не нажата, и LOW, когда нажата.
*/
void setup() // Начало последовательного соединения
Serial.begin(9600);
// Настройка пина 2 как входа и включение внутреннего подтягивающего резистора
pinMode(2, INPUT_PULLUP);
pinMode(13, OUTPUT);
>
void loop() // Считать значение кнопки в переменную
int sensorVal = digitalRead(2);
// Вывести значение кнопки
Serial.println(sensorVal);
// Учтите, что подтягивающий резистор означает, что логика кнопки инвертирована. Она
// становится HIGH, когда открыта, и LOW, когда нажата. Включите пин 13, когда
// кнопка нажата, и выключите, когда она не нажата:
if (sensorVal == HIGH) digitalWrite(13, LOW);
> else digitalWrite(13, HIGH);
>
>
5 примеров использования INPUT_PULLUP с pinMode():
Датчики кнопок: Используйте INPUT_PULLUP, чтобы считывать состояние кнопок или переключателей. Когда кнопка не нажата, вход будет HIGH, нажата — LOW.
Датчики дверей/окон: При помощи магнитных датчиков для дверей и окон можно определять, открыты они или закрыты. Внутренний подтягивающий резистор обеспечивает обнаружение изменений состояния.
Клавиатура: При создании собственной клавиатуры с использованием кнопок, вы можете использовать INPUT_PULLUP, чтобы знать, какие клавиши нажаты.
Сигналы включения/выключения: Если вы хотите управлять другими устройствами (например, светодиодами) при помощи кнопок, внутренний подтягивающий резистор облегчит обработку сигналов.
Управление режимами: Переключайте режимы вашего устройства (например, между режимом работы и режимом настройки) с помощью кнопок и INPUT_PULLUP.
Это всего лишь несколько примеров того, как можно использовать INPUT_PULLUP с pinMode().
Этот режим полезен везде, где важно определить, нажата ли кнопка или включено какое-либо внешнее устройство.
Константа INPUT_PULLUP
Микроконтроллеры ATmega, установленные на плату Arduino имеют внутренние подтягивающие резисторы 20 кОм (резисторы, которые подключаются к питанию). Их можно использовать вместо внешних подтягивающих резисторов, но для этого необходимо в функции pinMode () задать аргумент INPUT_PULLUP.
Таким образом на уровне программы или, так называемого скетча, можно добавить в вашу схему внутренний подтягивающий резистор или pull-up resistor микроконтроллера и не прибегать к установке внешнего. Это дает вам возможность не перегружать вашу схему или макет лишними деталями. Наиболее часто это используется для добавления туда функциональных кнопок.
Что такое подтягивающий резистор или PULL-UP resistor?
PULL-UP означает подтягивающий вверх, а именно к уровню логической единицы или питания схемы. Как правило это 3.3В или 5.0В и на схемах обозначается как VCC. Таким образом — это просто резистор, соединяющий логический вывод микроконтроллера с плюсом питания.
Зачем вообще нужен подтягивающий резистор или PULL-UP resistor?
Все очень просто. Давайте рассмотрим это на примере когда к цифровому входу микроконтроллера подключена тактовая кнопка. В этом случае цифровой вход соединен с кнопкой, а та в свою очередь разомкнута. На входе микроконтроллера может быть как 0 так и 1. Образно выражаясь, нога микроконтроллера болтается в воздухе и логический уровень на ней неизвестен. Нам же нужно, чтобы в разомкнутом состоянии там был четко уровень логической единицы. В этом случае на помощь приходит подтягивающий резистор, через который наш цифровой вход подключается к VCC. Таким образом цепь замыкается, между входным контактом и VCC течет небольшой ток (сопротивление большое, обычно 20 kOm) и на контакте устанавливается высокий уровень напряжения близкий к VCC — уровень логической единицы. Затем, когда кнопка замыкается, входной контакт подключается прямо на землю (GND). Ток потечет через резистор на землю и на входе таким образом установится низкий уровень — уровень логического 0. Опять же стоит иметь в виду, что отсутствие резистора при нажатой кнопке приводит к короткому замыканию, когда питание соединяется с землей, что крайне нежелательно делать.
Выводы, сконфигурированные как входы INPUT или INPUT_PULLUP, могут быть повреждены, если в какой-то момент коммутируются на землю прямо, без использования резистора.