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

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Нет описания правки
Нет описания правки
 
Строка 33: Строка 33:
== Код ==
== Код ==


<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">
/*
/*
   Кнопка
   Кнопка

Текущая версия от 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

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