Arduino:Примеры/InputPullupSerial: различия между версиями
Myagkij (обсуждение | вклад) Нет описания правки |
Myagkij (обсуждение | вклад) Нет описания правки |
||
Строка 5: | Строка 5: | ||
= Отслеживание состояния кнопки с помощью встроенного подтягивающего резистора <ref>[http://www.arduino.cc/en/Tutorial/InputPullupSerial Arduino - Input Pullup Serial]</ref>= | = Отслеживание состояния кнопки с помощью встроенного подтягивающего резистора <ref>[http://www.arduino.cc/en/Tutorial/InputPullupSerial Arduino - Input Pullup Serial]</ref>= | ||
Данный пример демонстрирует использование режима INPUT_PULLUP у функции pinMode(). Он отслеживает состояние кнопки (или переключателя) при последовательной передаче данных от | Данный пример демонстрирует использование режима [[Arduino:Справочник языка Arduino/Константы/INPUT PULLUP|INPUT_PULLUP]] у функции [[Arduino:Справочник языка Arduino/Функции/Цифровой ввод/вывод/pinMode()|pinMode()]]. Он отслеживает состояние кнопки (или переключателя) при последовательной передаче данных от [[компьютер]]а к [[Arduino]], соединенных через [[USB]]. | ||
Кроме того, если данные на входном контакте считываются как HIGH, включается «родной» для Arduino светодиод, подключенный к 13-му контакту, а если как LOW, то выключается. | |||
Кроме того, если данные на входном контакте считываются как [[Arduino:Справочник языка Arduino/Константы/HIGH|HIGH]], включается ''«родной»'' для [[Arduino]] [[светодиод]], подключенный к 13-му контакту, а если как [[Arduino:Справочник языка Arduino/Константы/LOW|LOW]], то выключается. | |||
== Необходимое оборудование == | == Необходимое оборудование == | ||
Строка 19: | Строка 20: | ||
[[File:inputPullupButton.png|center|frame|'''Рис. 1.''' [[Плата Arduino]] с подключенной кнопкой.|alt=Рис. 1. Плата Arduino с подключенной кнопкой.]] | [[File:inputPullupButton.png|center|frame|'''Рис. 1.''' [[Плата Arduino]] с подключенной кнопкой.|alt=Рис. 1. Плата Arduino с подключенной кнопкой.]] | ||
Подсоедините к | Подсоедините к [[Arduino]] два провода. Черный подсоедините к ''«земле»'' и к одной из ног кнопки. Второй провод подсоедините ко 2-му цифровому контакту и к другой ноге (не соединенной с первой) кнопки. | ||
Таким образом, если нажать на кнопку, она соединит две точки цепи, а если не нажимать, то никакой связи между ногами кнопки не будет. Поскольку на | Таким образом, если нажать на кнопку, она соединит две точки цепи, а если не нажимать, то никакой связи между ногами кнопки не будет. Поскольку на [[Arduino]] у 2-го контакта уже имеется встроенный [[подтягивающий резистор]], подключенный к напряжению в 5 вольт, состояние ненажатой кнопки будет считываться как [[Arduino:Справочник языка Arduino/Константы/HIGH|HIGH]]. Но если на кнопку нажать, [[Arduino]] определит это как [[Arduino:Справочник языка Arduino/Константы/LOW|LOW]], поскольку 5-вольтовое напряжение попросту уйдет в «землю». | ||
== Схема == | == Схема == | ||
Строка 28: | Строка 29: | ||
== Код == | == Код == | ||
Самая первая вещь которую нужно сделать – это задать в setup-секции программы последовательную передачу данных между | Самая первая вещь которую нужно сделать – это задать в setup-секции программы последовательную передачу данных между [[компьютер]]ом и [[Arduino]] со скоростью 9600 бит в секунду. Делается это при помощи следующей строчки кода: | ||
<syntaxhighlight lang="c" enclose="div"> | <syntaxhighlight lang="c" enclose="div"> | ||
Serial.begin(9600); | Serial.begin(9600); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Далее инициализируем 2-ой контакт как входной контакт, попутно активируя встроенный подтягивающий резистор: | |||
Далее инициализируем 2-ой контакт как входной контакт, попутно активируя встроенный [[подтягивающий резистор]]: | |||
<syntaxhighlight lang="c" enclose="div"> | <syntaxhighlight lang="c" enclose="div"> | ||
Строка 39: | Строка 41: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Нижеследующая строка делает 13-ый контакт (со встроенным | Нижеследующая строка делает 13-ый контакт (со встроенным [[светодиод]]ом) выходным контактом: | ||
<syntaxhighlight lang="c" enclose="div"> | <syntaxhighlight lang="c" enclose="div"> | ||
Строка 45: | Строка 47: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Теперь, когда с setup’ом покончено, переходим в секцию главного цикла. Если на кнопку не нажимают, встроенный подтягивающий резистор соединяется с 5-втольтовым напряжением. Следовательно, Arduino считывает это как «1» или HIGH. Но если на кнопку нажать, 2-ой контакт начинает тянуться к «земле», поэтому Arduino считывает эту ситуацию как «0» или LOW. | Теперь, когда с setup’ом покончено, переходим в секцию главного цикла. Если на кнопку не нажимают, встроенный [[подтягивающий резистор]] соединяется с 5-втольтовым напряжением. Следовательно, [[Arduino]] считывает это как ''«1»'' или [[Arduino:Справочник языка Arduino/Константы/HIGH|HIGH]]. Но если на кнопку нажать, 2-ой контакт начинает тянуться к ''«земле»'', поэтому Arduino считывает эту ситуацию как ''«0»'' или [[Arduino:Справочник языка Arduino/Константы/LOW|LOW]]. | ||
Поэтому, перво-наперво нужно задать переменную, которая будет хранить информацию, идущую от кнопки. Поскольку эта информация будет либо «1», либо «0», можно воспользоваться типом данных int. Назовем эту переменную sensorValue, и она будет равна любому значению, исходящему от 2-го цифрового контакта. Это можно сделать следующей строчкой кода: | |||
Поэтому, перво-наперво нужно задать переменную, которая будет хранить информацию, идущую от кнопки. Поскольку эта информация будет либо ''«1»'', либо ''«0»'', можно воспользоваться типом данных int. Назовем эту переменную sensorValue, и она будет равна любому значению, исходящему от 2-го цифрового контакта. Это можно сделать следующей строчкой кода: | |||
<syntaxhighlight lang="c" enclose="div"> | <syntaxhighlight lang="c" enclose="div"> | ||
Строка 52: | Строка 55: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Теперь сделаем так, чтобы Arduino не только считывала входные данные, но и в десятичном значении (DEC) выводила их на компьютер. Это можно сделать при помощи функции Serial.println() и следующей строчки кода: | Теперь сделаем так, чтобы [[Arduino]] не только считывала входные данные, но и в десятичном значении ([[DEC]]) выводила их на компьютер. Это можно сделать при помощи функции [[Arduino:Справочник языка Arduino/Библиотеки/Serial/println()|Serial.println()]] и следующей строчки кода: | ||
<syntaxhighlight lang="c" enclose="div"> | <syntaxhighlight lang="c" enclose="div"> | ||
Строка 58: | Строка 61: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Теперь, открыв меню Serial Monitor в среде разработки | Теперь, открыв меню Serial Monitor в среде разработки [[Arduino]], вы увидите цифровой поток из ''«0»'' (при нажатой кнопке) и ''«1»'' (если кнопка нажата не будет). | ||
Что касается | |||
Что касается [[светодиод]]а на 13-ом контакте, то при значении [[Arduino:Справочник языка Arduino/Константы/HIGH|HIGH]] он будет загораться, а при [[Arduino:Справочник языка Arduino/Константы/LOW|LOW]] – потухать. | |||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div"> | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div"> | ||
Строка 117: | Строка 121: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=См.также= | |||
# [[Arduino:Справочник языка Arduino/setup()|setup()]] | # [[Arduino:Справочник языка Arduino/setup()|setup()]] | ||
Строка 137: | Строка 141: | ||
# [[Arduino:Примеры/Tone4|Tone4]] | # [[Arduino:Примеры/Tone4|Tone4]] | ||
{{ads}} | |||
=Внешние ссылки= | |||
<references /> | <references /> |
Версия от 09:25, 19 декабря 2021
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Отслеживание состояния кнопки с помощью встроенного подтягивающего резистора [1]
Данный пример демонстрирует использование режима INPUT_PULLUP у функции pinMode(). Он отслеживает состояние кнопки (или переключателя) при последовательной передаче данных от компьютера к Arduino, соединенных через USB.
Кроме того, если данные на входном контакте считываются как HIGH, включается «родной» для Arduino светодиод, подключенный к 13-му контакту, а если как LOW, то выключается.
Необходимое оборудование
- Плата Arduino;
- Кнопка, переключатель или тумблер;
- Макетная плата Breadboard;
- Провода-перемычки;
Цепь
Подсоедините к Arduino два провода. Черный подсоедините к «земле» и к одной из ног кнопки. Второй провод подсоедините ко 2-му цифровому контакту и к другой ноге (не соединенной с первой) кнопки. Таким образом, если нажать на кнопку, она соединит две точки цепи, а если не нажимать, то никакой связи между ногами кнопки не будет. Поскольку на Arduino у 2-го контакта уже имеется встроенный подтягивающий резистор, подключенный к напряжению в 5 вольт, состояние ненажатой кнопки будет считываться как HIGH. Но если на кнопку нажать, Arduino определит это как LOW, поскольку 5-вольтовое напряжение попросту уйдет в «землю».
Схема
Код
Самая первая вещь которую нужно сделать – это задать в setup-секции программы последовательную передачу данных между компьютером и Arduino со скоростью 9600 бит в секунду. Делается это при помощи следующей строчки кода:
Serial.begin(9600);
Далее инициализируем 2-ой контакт как входной контакт, попутно активируя встроенный подтягивающий резистор:
pinMode(2,INPUT_PULLUP);
Нижеследующая строка делает 13-ый контакт (со встроенным светодиодом) выходным контактом:
pinMode(13, OUTPUT);
Теперь, когда с setup’ом покончено, переходим в секцию главного цикла. Если на кнопку не нажимают, встроенный подтягивающий резистор соединяется с 5-втольтовым напряжением. Следовательно, Arduino считывает это как «1» или HIGH. Но если на кнопку нажать, 2-ой контакт начинает тянуться к «земле», поэтому Arduino считывает эту ситуацию как «0» или LOW.
Поэтому, перво-наперво нужно задать переменную, которая будет хранить информацию, идущую от кнопки. Поскольку эта информация будет либо «1», либо «0», можно воспользоваться типом данных int. Назовем эту переменную sensorValue, и она будет равна любому значению, исходящему от 2-го цифрового контакта. Это можно сделать следующей строчкой кода:
int sensorValue = digitalRead(2);
Теперь сделаем так, чтобы Arduino не только считывала входные данные, но и в десятичном значении (DEC) выводила их на компьютер. Это можно сделать при помощи функции Serial.println() и следующей строчки кода:
Serial.println(sensorValue, DEC);
Теперь, открыв меню Serial Monitor в среде разработки Arduino, вы увидите цифровой поток из «0» (при нажатой кнопке) и «1» (если кнопка нажата не будет).
Что касается светодиода на 13-ом контакте, то при значении HIGH он будет загораться, а при LOW – потухать.
/*
Отслеживание состояния кнопки с помощью встроенного подтягивающего резистора
Этот пример показывает, как пользоваться режимом pinMode(INPUT_PULLUP).
Он считывает входные данные на 2-ом цифровом контакте,
а затем выводит результат в меню Serial Monitor.
Цепь:
* Кнопка подсоединена ко 2-му контакту и контакту с «землей»
* На 13-ом контакте имеется встроенный светодиод
В отличие от режима pinMode(INPUT), в данном случае нет необходимости в стягивающем резисторе.
Встроенный 20000-омовый резистор уже тянется к 5-вольтовому напряжению.
Следовательно, благодаря такой конфигурации при нажатой кнопке
входные данные будут считываться как LOW, а при ненажатой – как HIGH.
Создан 14 марта 2012 Скоттом Фитцджеральдом (Scott Fitzgerald).
http://www.arduino.cc/en/Tutorial/InputPullupSerial
Данный пример кода не защищен авторским правом.
*/
void setup() {
// запускаем последовательную передачу данных
Serial.begin(9600);
// задаем 2-ой контакт как входной,
// а также включаем встроенный подтягивающий резистор
pinMode(2, INPUT_PULLUP);
pinMode(13, OUTPUT);
}
void loop() {
// сохраняем информацию, полученную от кнопки, в переменную:
int sensorVal = digitalRead(2);
// выводим эту информацию на Serial Monitor:
Serial.println(sensorVal);
// Держите в уме, что использование подтягивающего резистора
// переворачивает логику программы с ног на голову.
// Когда кнопка не нажата, Arduino считывает это как HIGH,
// а если нажата, то как LOW.
// Если кнопка нажата, то светодиод будет гореть,
// а если нет – то не будет:
if (sensorVal == HIGH) {
digitalWrite(13, LOW);
}
else {
digitalWrite(13, HIGH);
}
}
См.также
- setup()
- loop()
- pinMode()
- digitalRead()
- delay()
- int
- Serial
- DigitalPins
- BlinkWithoutDelay
- Button
- Debounce
- ButtonStateChange
- InputPullupSerial
- Tone
- Pitch follower
- Simple keyboard
- Tone4
Внешние ссылки
Arduino продукты | |
---|---|
Начальный уровень | Arduino Uno • Arduino Leonardo • Arduino 101 • Arduino Robot • Arduino Esplora • Arduino Micro • Arduino Nano • Arduino Mini • Arduino Starter Kit • Arduino Basic Kit • MKR2UNO • TFT-дисплей Arduino |
Продвинутые функции | Arduino Mega 2560 • Arduino Zero • Arduino Due • Arduino Mega ADK • Arduino Pro • Arduino Motor Shield • Arduino USB Host Shield • Arduino Proto Shield • MKR Proto Shield • MKR Proto Large Shield • Arduino ISP • Arduino USB 2 Serial Micro • Arduino Mini USB Serial Adapter |
Интернет вещей | Arduino Yun • Arduino Ethernet • Arduino MKR1000 • Arduino WiFi 101 Shield • Arduino GSM Shield V2 • Arduino WiFi Shield • Arduino Wireless SD Shield • Arduino Wireless Proto Shield • Arduino Ethernet Shield V2 • Arduino Yun Shield • Arduino MKR1000 Bundle |
Носимые устройства | Arduino Gemma • Lilypad Arduino Simple • Lilypad Arduino Main Board • Lilypad Arduino USB • LilyPad Arduino SimpleSnap |
3D-печать | Arduino Materia 101 |
Устаревшие устройства | - |
- Страницы с устаревшим атрибутом подсветки синтаксиса «enclose»
- Страницы, использующие повторяющиеся аргументы в вызовах шаблонов
- Справочник языка Arduino
- Arduino
- Перевод от Сubewriter
- Проверка:myagkij
- Оформление:myagkij
- Редактирование:myagkij
- Страницы, где используется шаблон "Навигационная таблица/Телепорт"
- Страницы с телепортом
- Пример
- Примеры
- Пример программирования Arduino
- Примеры программирования Arduino