Arduino:Примеры/InputPullupSerial: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Нет описания правки
Нет описания правки
 
(не показано 6 промежуточных версий 1 участника)
Строка 3: Строка 3:
{{Myagkij-редактор}}
{{Myagkij-редактор}}


== Отслеживание состояния кнопки с помощью встроенного подтягивающего резистора <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, соединенных через USB.
Данный пример демонстрирует использование режима [[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]], то выключается.


== Необходимое оборудование ==
== Необходимое оборудование ==


* Плата '''Arduino''';
* [[Плата Arduino]] - 1 шт.
* Кнопка, переключатель или тумблер;
* [[Кнопка]], [[переключатель]] или [[тумблер]] - 1шт.
* Макетная плата '''Breadboard''';
* [[Макетная плата]] - 1шт.
* Провода-перемычки;
* Провода-перемычки.


== Цепь ==
== Цепь ==


[[File:inputPullupButton.png]]
[[File:inputPullupButton.png|center|frame|'''Рис. 1.''' [[Плата Arduino]] с подключенной кнопкой.|alt=Рис. 1. Плата Arduino с подключенной кнопкой.]]


Подсоедините к '''Arduino''' два провода. Черный подсоедините к «земле» и к одной из ног кнопки. Второй провод подсоедините ко 2-му цифровому контакту и к другой ноге (не соединенной с первой) кнопки.
Подсоедините к [[Arduino]] два провода. Черный подсоедините к ''«земле»'' и к одной из ног кнопки. Второй провод подсоедините ко 2-му цифровому контакту и к другой ноге (не соединенной с первой) кнопки.
Таким образом, если нажать на кнопку, она соединит две точки цепи, а если не нажимать, то никакой связи между ногами кнопки не будет. Поскольку на '''Arduino''' у 2-го контакта уже имеется встроенный подтягивающий резистор, подключенный к напряжению в 5 вольт, состояние ненажатой кнопки будет считываться как HIGH. Но если на кнопку нажать, Arduino определит это как LOW, поскольку 5-вольтовое напряжение попросту уйдет в «землю».  
Таким образом, если нажать на кнопку, она соединит две точки цепи, а если не нажимать, то никакой связи между ногами кнопки не будет. Поскольку на [[Arduino]] у 2-го контакта уже имеется встроенный [[подтягивающий резистор]], подключенный к напряжению в 5 вольт, состояние ненажатой кнопки будет считываться как [[Arduino:Справочник языка Arduino/Константы/HIGH|HIGH]]. Но если на кнопку нажать, [[Arduino]] определит это как [[Arduino:Справочник языка Arduino/Константы/LOW|LOW]], поскольку 5-вольтовое напряжение попросту уйдет в «землю».  


== Схема ==
== Схема ==


[[File:inputPullupSerial_sch.png]]
[[File:inputPullupSerial_sch.png|center|frame|'''Рис. 2.''' Схема подключения кнопки к [[плате Arduino]]|alt=Рис. 2. Схема подключения кнопки к плате Arduino]]


== Код ==
== Код ==


Самая первая вещь которую нужно сделать – это задать в setup-секции программы последовательную передачу данных между компьютером и '''Arduino''' со скоростью 9600 бит в секунду. Делается это при помощи следующей строчки кода:
Самая первая вещь которую нужно сделать – это задать в setup-секции программы последовательную передачу данных между [[компьютер]]ом и [[Arduino]] со скоростью 9600 бит в секунду. Делается это при помощи следующей строчки кода:


<syntaxhighlight lang="c" enclose="div">
<syntaxhighlight lang="c">
Serial.begin(9600);
Serial.begin(9600);
</syntaxhighlight>
</syntaxhighlight>
Далее инициализируем 2-ой контакт как входной контакт, попутно активируя встроенный подтягивающий резистор:


<syntaxhighlight lang="c" enclose="div">
Далее инициализируем 2-ой контакт как входной контакт, попутно активируя встроенный [[подтягивающий резистор]]:
 
<syntaxhighlight lang="c">
pinMode(2,INPUT_PULLUP);
pinMode(2,INPUT_PULLUP);
</syntaxhighlight>
</syntaxhighlight>


Нижеследующая строка делает 13-ый контакт (со встроенным светодиодом) выходным контактом:
Нижеследующая строка делает 13-ый контакт (со встроенным [[светодиод]]ом) выходным контактом:


<syntaxhighlight lang="c" enclose="div">
<syntaxhighlight lang="c">
pinMode(13, OUTPUT);
pinMode(13, OUTPUT);
</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">
int sensorValue = digitalRead(2);
int sensorValue = digitalRead(2);
</syntaxhighlight>
</syntaxhighlight>


Теперь сделаем так, чтобы Arduino не только считывала входные данные, но и в десятичном значении (DEC) выводила их на компьютер. Это можно сделать при помощи функции Serial.println() и следующей строчки кода:  
Теперь сделаем так, чтобы [[Arduino]] не только считывала входные данные, но и в десятичном значении ([[DEC]]) выводила их на компьютер. Это можно сделать при помощи функции [[Arduino:Справочник языка Arduino/Библиотеки/Serial/println()|Serial.println()]] и следующей строчки кода:  


<syntaxhighlight lang="c" enclose="div">
<syntaxhighlight lang="c">
Serial.println(sensorValue, DEC);
Serial.println(sensorValue, DEC);
</syntaxhighlight>
</syntaxhighlight>


Теперь, открыв меню Serial Monitor в среде разработки '''Arduino''', вы увидите цифровой поток из «0» (при нажатой кнопке) и «1» (если кнопка нажата не будет).  
Теперь, открыв меню Serial Monitor в среде разработки [[Arduino]], вы увидите цифровой поток из ''«0»'' (при нажатой кнопке) и ''«1»'' (если кнопка нажата не будет).  
Что касается светодиода на 13-ом контакте, то при значении HIGH он будет загораться, а при LOW – потухать.  
 
Что касается [[светодиод]]а на 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">
/*
/*
  Отслеживание состояния кнопки с помощью встроенного подтягивающего резистора
  Отслеживание состояния кнопки с помощью встроенного подтягивающего резистора
Строка 117: Строка 121:
</syntaxhighlight>
</syntaxhighlight>


==См.также==
=См.также=


# [[Arduino:Справочник языка Arduino/setup()‎|setup()‎]]
# [[Arduino:Справочник языка Arduino/setup()‎|setup()‎]]
Строка 137: Строка 141:
# [[Arduino:Примеры/Tone4|Tone4]]
# [[Arduino:Примеры/Tone4|Tone4]]


==Внешние ссылки==
=Внешние ссылки=


<references />
<references />


{{Навигационная таблица/Справочник языка Arduino}}
{{Навигационная таблица/Портал/Arduino}}
{{Навигационная таблица/Arduino библиотеки}}


[[Категория:Пример]]
[[Категория:Пример]]

Текущая версия от 18:19, 14 мая 2023

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Отслеживание состояния кнопки с помощью встроенного подтягивающего резистора [1]

Данный пример демонстрирует использование режима INPUT_PULLUP у функции pinMode(). Он отслеживает состояние кнопки (или переключателя) при последовательной передаче данных от компьютера к Arduino, соединенных через USB.

Кроме того, если данные на входном контакте считываются как HIGH, включается «родной» для Arduino светодиод, подключенный к 13-му контакту, а если как LOW, то выключается.

Необходимое оборудование

Цепь

Рис. 1. Плата Arduino с подключенной кнопкой.
Рис. 1. Плата Arduino с подключенной кнопкой.

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

Схема

Рис. 2. Схема подключения кнопки к плате Arduino
Рис. 2. Схема подключения кнопки к плате Arduino

Код

Самая первая вещь которую нужно сделать – это задать в 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);
  }
}

См.также

  1. setup()‎
  2. loop()
  3. pinMode()
  4. digitalRead()
  5. delay()
  6. int
  7. Serial
  8. DigitalPins
  9. BlinkWithoutDelay
  10. Button
  11. Debounce
  12. ButtonStateChange
  13. InputPullupSerial
  14. Tone
  15. Pitch follower
  16. Simple keyboard
  17. Tone4

Внешние ссылки