Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Примеры/Button

Материал из Онлайн справочника
Перейти к: навигация, поиск

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

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


Кнопка [1]

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

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

  • Плата Arduino;
  • Кнопка или переключатель;
  • Резистор на 10кОм;
  • Макетная плата Breadboard;
  • Провода-перемычки;

Цепь

Button Circuit.png

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

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

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

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

Схема

Button Schematic.png

Код

  1. /*
  2.   Кнопка
  3.  
  4.  При нажатии на кнопку, подсоединенную ко 2-му контакту, включает и выключает светодиод, подключенный к 13-му цифровому контакту.
  5.  
  6.  
  7.  Цепь:
  8.  * Светодиод подсоединен к 13-му контакту и «земле»
  9.  * Кнопка подсоединена ко 2-му и 5-вольтовому контактам
  10.  * Ко 2-му контакту через «землю» подключен резистор на 10 кОм
  11.  
  12.  * Примечание: на большинстве Arduino уже есть светодиод, подключенный к 13-му контакту.
  13.  
  14.  
  15.  создан в 2005 пользователем DojoDave <http://www.0j0.org>,
  16.  модифицирован 30 августа 2011 Томом Иго (Tom Igoe)
  17.  
  18.  Данный пример кода не защищен авторским правом.
  19.  
  20.  http://www.arduino.cc/en/Tutorial/Button
  21.  */
  22.  
  23. // Тут вписываем константы – это постоянные (т.е. не меняющиеся) значения. Используем их, чтобы задать номера контактов:
  24. const int buttonPin = 2;     // задаем номер для контакта кнопки
  25. const int ledPin =  13;      // задаем номер для контакта светодиода
  26.  
  27. // Тут вписываем переменные – это значения, которые изменятся:
  28. int buttonState = 0;         // переменная для считывания состояния кнопки
  29.  
  30. void setup() {
  31.   // инициализируем контакт светодиода как выходной контакт:
  32.   pinMode(ledPin, OUTPUT);      
  33.   // инициализируем контакт кнопки как входной контакт:
  34.   pinMode(buttonPin, INPUT);  
  35. }
  36.  
  37. void loop(){
  38.   // считываем значение, соответствующее состоянию кнопки:
  39.   buttonState = digitalRead(buttonPin);
  40.  
  41.   // проверяем, не нажата ли кнопка.
  42.   // если нажата, переводим buttonState в HIGH:
  43.   if (buttonState == HIGH) {    
  44.     // включаем светодиод:    
  45.     digitalWrite(ledPin, HIGH);  
  46.   }
  47.   else {
  48.     // выключаем светодиод:
  49.     digitalWrite(ledPin, LOW);
  50.   }
  51. }

См.также

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

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

  1. Arduino - Button