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

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


== Кнопка <ref>[http://www.arduino.cc/en/Tutorial/Button Arduino - Button]</ref>==
= Кнопка <ref>[http://www.arduino.cc/en/Tutorial/Button Arduino - Button]</ref>=


Кнопки и переключатели, когда вы их используете, соединяют в электрической цепи две точки. В данном примере будет показано, как заставить светодиод (присоединенный '''к 13-му контакту''') загораться каждый раз при нажатии на кнопку.
Кнопки и переключатели, когда вы их используете, соединяют в электрической цепи две точки. В данном примере будет показано, как заставить [[светодиод]] (присоединенный к 13-му контакту) загораться каждый раз при нажатии на кнопку.


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


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


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


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


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


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


Цепь можно построить и по-другому, поставив туда не '''стягивающий''', а '''подтягивающий''' резистор, который будет постоянно держать входной контакт в значении [[Arduino:Справочник языка Arduino/Константы/HIGH|HIGH]], а [[Arduino:Справочник языка Arduino/Константы/LOW|LOW]] будет считываться только при нажатии на кнопку. В этом случае скетч нужно будет переписать таким образом, чтобы светодиод был по умолчанию в значении '''«вкл»''' и выключался лишь от нажатия на кнопку.  
Цепь можно построить и по-другому, поставив туда не стягивающий, а [[подтягивающий резистор]], который будет постоянно держать входной контакт в значении [[Arduino:Справочник языка Arduino/Константы/HIGH|HIGH]], а [[Arduino:Справочник языка Arduino/Константы/LOW|LOW]] будет считываться только при нажатии на кнопку. В этом случае скетч нужно будет переписать таким образом, чтобы [[светодиод]] был по умолчанию в значении ''«вкл»'' и выключался лишь от нажатия на кнопку.  


Если отсоединить цифровой контакт ото всего, то светодиод примется хаотично мигать. Это значит, что выходное значение будет '''«плавающим»''', т.е. беспорядочно переключающимся из [[Arduino:Справочник языка Arduino/Константы/LOW|LOW]] в [[Arduino:Справочник языка Arduino/Константы/HIGH|HIGH]] и наоборот. Именно поэтому в цепи и нужны стягивающие/подтягивающие резисторы.
Если отсоединить цифровой контакт ото всего, то [[светодиод]] примется хаотично мигать. Это значит, что выходное значение будет ''«плавающим»'', т.е. беспорядочно переключающимся из [[Arduino:Справочник языка Arduino/Константы/LOW|LOW]] в [[Arduino:Справочник языка Arduino/Константы/HIGH|HIGH]] и наоборот. Именно поэтому в цепи и нужны стягивающие/[[подтягивающие резисторы]].


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


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


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


<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">
/*
/*
   Кнопка
   Кнопка
Строка 87: Строка 87:
</syntaxhighlight>
</syntaxhighlight>


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


# [[Arduino:Справочник языка Arduino/Функции/Цифровой ввод/вывод/pinMode()|pinMode()]]
# [[Arduino:Справочник языка Arduino/Функции/Цифровой ввод/вывод/pinMode()|pinMode()]]
Строка 100: Строка 100:
# [[Arduino:Примеры/ButtonStateChange|Button State Change]]
# [[Arduino:Примеры/ButtonStateChange|Button State Change]]


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


<references />
<references />


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


[[Категория:Пример]]
[[Категория:Пример]]
Строка 112: Строка 110:
[[Категория:Пример программирования Arduino]]
[[Категория:Пример программирования Arduino]]
[[Категория:Примеры программирования Arduino]]
[[Категория:Примеры программирования Arduino]]
[[Категория:const]]
[[Категория:int]]
[[Категория:setup()]]
[[Категория:setup]]
[[Категория:void]]
[[Категория:pinMode()]]
[[Категория:pinMode]]
[[Категория:OUTPUT]]
[[Категория:INPUT]]
[[Категория:digitalRead]]
[[Категория:digitalRead()]]
[[Категория:HIGH]]
[[Категория:LOW]]
[[Категория:pinMode(pin, OUTPUT)]]
[[Категория:pinMode(pin, INPUT)]]
[[Категория:if]]
[[Категория:else]]
[[Категория:digitalWrite]]
[[Категория:digitalWrite()]]
[[Категория:digitalWrite(pin, LOW)]]
[[Категория:digitalWrite(pin, HIGH)]]
[[Категория:Плата Arduino]]
[[Категория:Кнопка]]
[[Категория:Резистор]]
[[Категория:10 кОм]]
[[Категория:Макетная плата]]
[[Категория:Провода-перемычки]]
[[Категория:Резистор 10 кОм]]

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

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


Кнопка [1]

Кнопки и переключатели, когда вы их используете, соединяют в электрической цепи две точки. В данном примере будет показано, как заставить светодиод (присоединенный к 13-му контакту) загораться каждый раз при нажатии на кнопку.

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

Цепь

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

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

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

Цепь можно построить и по-другому, поставив туда не стягивающий, а подтягивающий резистор, который будет постоянно держать входной контакт в значении HIGH, а LOW будет считываться только при нажатии на кнопку. В этом случае скетч нужно будет переписать таким образом, чтобы светодиод был по умолчанию в значении «вкл» и выключался лишь от нажатия на кнопку.

Если отсоединить цифровой контакт ото всего, то светодиод примется хаотично мигать. Это значит, что выходное значение будет «плавающим», т.е. беспорядочно переключающимся из LOW в HIGH и наоборот. Именно поэтому в цепи и нужны стягивающие/подтягивающие резисторы.

Схема

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

Код

/*
  Кнопка
 
 При нажатии на кнопку, подсоединенную ко 2-му контакту, включает и выключает светодиод, подключенный к 13-му цифровому контакту. 
 
 
 Цепь:
 * Светодиод подсоединен к 13-му контакту и «земле» 
 * Кнопка подсоединена ко 2-му и 5-вольтовому контактам
 * Ко 2-му контакту через «землю» подключен резистор на 10 кОм 

 * Примечание: на большинстве Arduino уже есть светодиод, подключенный к 13-му контакту. 
 
 
 создан в 2005 пользователем DojoDave <http://www.0j0.org>,
 модифицирован 30 августа 2011 Томом Иго (Tom Igoe)
 
 Данный пример кода не защищен авторским правом.
 
 http://www.arduino.cc/en/Tutorial/Button
 */

// Тут вписываем константы – это постоянные (т.е. не меняющиеся) значения. Используем их, чтобы задать номера контактов: 
const int buttonPin = 2;     // задаем номер для контакта кнопки
const int ledPin =  13;      // задаем номер для контакта светодиода

// Тут вписываем переменные – это значения, которые изменятся:
int buttonState = 0;         // переменная для считывания состояния кнопки

void setup() {
  // инициализируем контакт светодиода как выходной контакт:
  pinMode(ledPin, OUTPUT);      
  // инициализируем контакт кнопки как входной контакт:
  pinMode(buttonPin, INPUT);   
}

void loop(){
  // считываем значение, соответствующее состоянию кнопки:
  buttonState = digitalRead(buttonPin);

  // проверяем, не нажата ли кнопка.
  // если нажата, переводим buttonState в HIGH:
  if (buttonState == HIGH) {     
    // включаем светодиод:    
    digitalWrite(ledPin, HIGH);  
  } 
  else {
    // выключаем светодиод:
    digitalWrite(ledPin, LOW); 
  }
}

См.также

  1. pinMode()
  2. digitalWrite()
  3. digitalRead()
  4. if()
  5. if/else()
  6. BareMinimum
  7. DigitalReadSerial
  8. Blink
  9. Debounce
  10. Button State Change

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