Разновидности кнопок и их подключение к Ардуино

Хотя платформа Arduino предназначена для непрофессиональных пользователей, операции с ней, в частности, подключение кнопки к Ардуино, требует навыков. Прежде чем приступать к работе, следует узнать, плата нано- или классическая, каким образом осуществлять управление, выбрать способ подключения.

Кнопка

Разновидности кнопок

Кнопка Arduino служит своего рода датчиком, посылающим сигнал контроллеру, благодаря чему устройство выполняет набор действий, зашифрованный в команде.

Существует 2 разновидности кнопок:

  • переключатели;
  • тактовые.

Первый вид возвращается в первоначальное положение после прекращения воздействия.

Второй вид, называемый кнопками без фиксации, после прекращения приложения усилия фиксируются в такой позиции, какую им придали.

Инструкция по подключению кнопки

В платформы включены тактовые кнопки Ардуино, состоящие из переключателя с 2 парами контактов, соединенных между собой. Подобная система не позволяет создать больше, чем 1 выключатель, зато дает возможность управления 2 параллельными сегментами сразу.

Схема

Без резистора

Перед подключением нужно уделить внимание размыкающим контактам. По сторонам квадратного датчика находятся по 2 ножки, а посередине ножек создается выключатель. Чтобы включить датчик, нужно соединиться с 2 контактами, находящимися максимально близко друг к другу. Другие 2 будут повторять первую пару.

С использованием подтягивающего резистора

В этой схеме датчик подтягивается резистором к «плюсу» и замыкает вход на «землю». Чтобы резистор выполнял свою работу верно, следует добавить сопротивление 10 кОм, при такой величине он сможет притягивать контакт к «земле».

К платформе следует присоединить 3 провода. Первый прикрепить к 1 из ножек, провести через резистор и заземлить. Следующий присоединить ко второй ножке, провести к Arduino-контакту с 5-Вольтовым напряжением. Последний подсоединить к третьей, не имеющей контактов ни с одной из двух предыдущих, и подвести ко второму цифровому, который станет считывать состояние кнопки.

В скетче для этой схемы нажатая кнопка обозначается LOW, вернувшаяся в исходное положение (отпущенная) прописывается как HIGH.

В режиме input-pullup

Позволяет при подключении и в работе обойтись без резистора. В этом случае используется внутреннее сопротивление самой платы. Чтобы написать алгоритм, следует определить пин, к которому планируется подключать кнопку, как INPUT_PULLUP.

Есть альтернативная версия, в которой вместо обозначенной команды можно использовать пин OUTPUT.

Включение-выключение с помощью кнопки

Есть разные варианты включения и выключения:

  • светодиод включается при нажатой кнопке, выключается при отпущенной;
  • светодиод включается при нажатии, отключается при повторном нажатии;
  • светодиод включается при долгом нажатии;

Для данных схем можно использовать один и тот же скетч, внося лишь изменения в код.

Как переключать режимы кнопкой

Переключение нескольких режимов осуществляется путем задания иной переменной mode. Ее значение станет меняться при последующем нажатии на датчик управления.
В некоторых ситуациях придется менять саму электросхему.

Скетчи для подключения и управления кнопкой

Коды для платформы Arduino чаще всего пишутся на языке программирования C/C++.

В любом скетче должны присутствовать команды setup и loop. Первая прописывается для процедуры, которая станет выполняться 1 раз. Кусок кода, прописанный после второй команды, и есть основной код, который станет повторяться на протяжении всей программы.

Константы INPUT, OUTPUT, LOW, HIGH всегда следует писать большими буквами, иначе при обработке данных компилятор выдаст ошибку.

Существует набор клавиш, позволяющий работать с программой быстрее. Это сочетания: Ctrl + Z, Y, F, X, C, V, R, U, S, служат ради облегчения и ускорения действий с кодом, а также используются с целью загрузки и сохранения скетчей.

с++

Скетч для включения при нажатии и выключения при отпущенном датчике выглядит так:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int LedPin = 13;                    // подключается светодиод к порту 13
int ButPin = 10;                    // подключается датчик к выходу 10
 
void setup()
{
    pinMode(LedPin, OUTPUT);        // инициализируется порт как выходной
}
 
void loop()
{
    if(digitalRead(ButPin) == HIGH) // если датчик нажат
    {
        digitalWrite(LedPin, HIGH); // то включается светодиод
    }
    else
    {
        digitalWrite(LedPin,LOW);   // светодиод отключается
    }
}

Подключение к выходу 10 int и светодиода к порту 13 int является константой: это постоянные, не меняющие значения. Далее контакт для светодиода инициализируется как выходной.

Затем прописываются данные, считанные с предыдущего положения, и в соответствии с ними поменяется положение светодиода.

В алгоритм можно добавить команду loop int buttonstate, позволяющую снимать данные непосредственно с состояния датчика.

Скетч для включения при нажатии и отключения при очередном нажатии:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int LedPin = 13;                                    // подключается светодиод к порту 13
int ButPin = 10;                                    // подключается кнопка к выходу 10
 
void setup()
{
    pinMode(LedPin, OUTPUT);                        // инициализируется порт "ledPin" как выходной
}
 
void loop()
{
    if(digitalRead(ButPin) == HIGH)                 // если кнопка нажата
    {
        digitalWrite(LedPin, !digitalRead(LedPin)); // то переключается положение LedPin
        delay(500);
    }
}

Таким образом, в код введена переменная, позволяющая задержать дребезг контактов, а пин инвертирован так, чтобы светодиод переключался.

Скетч для переключения режимов светодиода:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
 
int redled = 13;   // пин 13, первый светодиод
int blueled = 12;  // пин 12, второй светодиод
int butpin = 10;   // пин 10, кнопка
int flag = 0;      // флаг состояния
bool mode;         // переключатель
uint32_t time = 0;
 
void setup()
{
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(10, INPUT);
}
void loop() {
  static int myVar = 0;
  if (digitalRead(butpin) == HIGH && flag == 0)
  {
    mode = !mode;
    flag = 1;
  }
  if (digitalRead(butpin) == LOW && flag == 1)
  {
    flag = 0;
  }
  if (mode) {
    if (millis() - time >= 1000) {
      time = millis();
      switch (myVar) {
        case 0:
          digitalWrite(redled, HIGH);   // 1 0
          digitalWrite(blueled, LOW);
          myVar++;
          break;
        case 1:
          digitalWrite(redled, LOW);    // 0 1
          digitalWrite(blueled, HIGH);
          myVar++;
          break;
        case 2:
          digitalWrite(redled, HIGH);   // 1 1
          digitalWrite(blueled, HIGH);
          myVar++;
          break;
        case 3:
          digitalWrite(redled, LOW);    // 0 1
          digitalWrite(blueled, HIGH);
          myVar++;
          break;
        case 4:
          digitalWrite(redled, HIGH);   // 1 0
          digitalWrite(blueled, LOW);
          myVar++;
          break;
        case 5:
          digitalWrite(redled, LOW);    // 0 0
          digitalWrite(blueled, LOW);
          myVar = 0;
          break;
      }
 
    }
  }
 
  if (!mode) {
    digitalWrite(redled, HIGH);
    digitalWrite(blueled, LOW);
    myVar = 0;
  }
}

После переключателя режимов следует внести void setup(). После вписать трижды pinMode R_, G_, B_LedPin, OUTPUT.

Для каждого режима необходимо использовать команду if(mode == …), с числом, соответствующим порядку.

После digitalWrite каждый раз нужно задавать LedPin.

Перед LedPin в каждом из случаев должно стоять R_, G_ и В_.

В скетче осуществлялось переключение между режимами OFF, R, G, B, RG, GB, RB, RGB, которое работало благодаря замене переменной mode, разной при очередных нажатиях.

Ссылка на основную публикацию