Перед тем, как перейти создавать выключатель, разберемся и объясним, что такое порты ввода и вывода. Любая плата обладает своими вводами и выводами. Их называют выходами, портами, пинами(от анг. pin). Для того, чтобы разобраться с платами, используют Arduino, как правило, Arduino UNO.
Приведем в качестве примера схему платы. На ее «углах» вы можете увидеть выводы, обладающие обозначениями цифрового формата с тильдой и без нее. Выводы с тильдой являются PWM-Широтно Импульсная Модуляция(ШИМ). Данные импульсы используются для управления устройствами, требующими аналоговый сигнал.
Выводы платы Arduino
Каждый вывод сверху подписан цифровым обозначением от 0 до 13 и GND. Эти выводы являются цифровыми. Выводы снизу-от A0 до A5, GND в объёме 2 штук, 5V и 3.3V соответственно. Они являются аналоговыми, их используют в случае нехватки цифровых. В программном формате аналоговые выводы можно обозначать как 14, 15, 16, 17, 18, 19 вместо A0, A1, A2, A3, A4, A5. Как правило, подобные обозначения используются для создания большого массива пинов.
Как цифровые, так и аналоговые выводы могут принимать сигнал цифрового вида. Некая последовательность логических нулей и единиц от скачков напряжение от 0 до 5 вольт называется цифровым сигналом. Однако только аналоговые пины принимают аналоговые сигналы. Аналоговые выводы представляют собой плавно изменяющееся напряжение в диапазоне от 0 до 5 вольт с незначительным шагом.
Управление цифровыми пинами осуществляется через подачу тока или прекращение подачи. С вывода можно считать информацию о подаче или отсутствии тока. Для этого нужно создать замкнутую цепь.
Порты платы и режимы работы
Аналоговые и цифровые порты могут работать как входы, так и выходы. По умолчанию все они настроены как входы. Настройка режима работы осуществляется при помощи команды вида:
pinmode(pin, mode), где pin это номер порта(цифровые от 0 до 13, аналоговые от 14 до 19, либо же от A0 до A5), mode-режим работы порта(INPUT-вход(приём сигнала); OUTPUT-выход, выдаёт 0 или 5В; INPUT_PULLUP-вход с плавным повышением напряжения от 0 до 5В).Примеры использования:
pinMode(1, INPUT); — назначаем pin(порт) с номером 1 в качестве входа
pinMode(2, OUTPUT); — назначаем pin(порт) с номером 2 в качестве вывода
pinMode(3, INPUT_PULLUP); — назначаем pin(порт) с номером 3 входа с возрастанием напряжения от 0 до 5 вольт. Подробнее о примерах сфер использования можно прочитать далее.
Во-первых, поговорим о том, как подключить кнопку к плате. Для этого нужно объявить пины выходами командой pinMode. Допустим, это будут аналоговый пин номер 5, а также 2 цифровых-12 и 13. Для подачи сигнала на пин используется функция вида:
digitalWrite(pin, signal), где pin-номер пина, signal-тип подаваемого сигнала(LOW, 0 или false подают сигнал в 0 В; HIGH, 1 или true подают сигнал в 5 В).
На заметку: напряжение измеряется между цифровым пином и землей(пин с названием GND-от англ.Ground-земля).
Объясним это на примере программы:
void setup() {
pinMode(A5, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
digitalWrite(13, HIGH);
digitalWrite(12, 1);
digitalWrite(A5, 0);
}
void loop() {
}
На выводе А5(аналоговый цифровой) напряжение в нашем случае-0 вольт. На пине номер 12 напряжение составляет 4.68 Вольт. Почему же оно не равно 5 вольтам? Дело в том, что данный порт питается от USB, соответственно на него нужно затратить некое напряжение. К тому же, у нас горит светодиод.
Подключение кнопки к Arduino
Плавно перейдем к тому, как подключить кнопку к плате Arduino? Для этого нам понадобится непосредственно кнопка и переназначение наших пинов в качестве входов(кнопка передает сигнал и считывает значение логической переменной, отображающей наличие напряжения на пине, передавая его непосредственно нам на экран)
void setup() {
pinMode(A5, INPUT);
pinMode(12, INPUT);
pinMode(13, INPUT);
Serial.begin(9600);
}
void loop() {
boolean button1 = digitalRead(A5);
boolean button2 = digitalRead(13);
Serial.print(“Button1: ”);Serial.print(button1);
Serial.print(«, Button2: «);Serial.println(button2);
}
Значения равны нулю(любые подключения отсутствуют). Источник высокого сигнала логической единицы(истины) является непосредственно наша микросхема и 5 вольтовый пин. Поставив провод в 5 В на A5 мы получим значение Button1, равное 1. При отключении провода значение остается прежним. При подаче низкого сигнала от пина земли(GND) оба значения равны 0.
Теперь поставим резистор на землю и пин A5. Резистор подставляем к кнопке(ее можно поставить в любое свободное место). Кнопка соединяется с землей резистора. При нажатии кнопки значение Button1 равняется логической единице. Однако не требуется ставить резистор на каждую кнопку, поскольку резистор предусмотрен в нашем рабочем пространстве Arduino. Режим функции pinMode INPUT_PULLUP «заставляет» включить встроенный в плату Arduino резистор. Его легко использовать для подключения кнопок. Отличие режима работы в том, что кнопка идет к земле, а при нажатии кнопки мы будем получать 0, а при отпущенной-1. Для этого нам нужно инвертировать(сделать обратным) сигнал с A5.
void setup() {
pinMode(A5, INPUT_PULLUP);
pinMode(12, INPUT);
pinMode(13, INPUT);
Serial.begin(9600);
}
void loop() {
boolean button1 = !digitalRead(A5); // инвертируем сигнал с A5
boolean button2= digitalRead(13);
Serial.print(“Button1: ”);Serial.print(button1);
Serial.print(“, Button2: “);Serial.println(button2);
}
Именно таким способом рекомендуется подключать кнопки и обрабатывать их нажатия.
Кнопка-включатель во время нажатия
void setup() {
pinMode(A5, INPUT_PULLUP);
pinMode(12, INPUT);
pinMode(13, OUTPUT); // встроенный светодиод
Serial.begin(9600);
}
void loop() {
boolean button1 = !digitalRead(A5); // инвертируем сигнал с A5
boolean button2= digitalRead(13);
if (button1 == 1) digitalWrite(13, 1); // включение светодиода
else digitalWrite(13, 0); //выключение светодиода
Serial.print(“Button1: ”);Serial.print(button1);
Serial.print(“, Button2: “);Serial.println(button2);
}
Включаем и выключаем встроенный светодиод при помощи нажатия кнопки. Написанное условие в программе означает: Подача высокого сигнала осуществляется на 13 порт при нажатой кнопке, при отпущенной-низкий. 13 порт отвечает за встроенный светодиод.
Создаем кнопку-выключатель светодиода
В итоге, у нас подается напряжение на кнопку, в случае, если оно проходит через нее, то светодиод загорается во время нажатия. Нашей целью является создание выключателя, то есть после нажатия светодиод будет гореть, а при повторном-он гаснет.
int tekButton = LOW; // отсутствие напряжения на кнопке
int prevButton = LOW; // прошлое состояние кнопки
boolean ledOn = false; // включение светодиода
void setup() {
pinmode(12, INPUT);
pinmode(13, OUTPUT);
}
boolean testLed(boolean last) { // проверка светодиода
boolean current = digitalRead(12);
if (last != current) { // “last” принимает значение 1 или 0, “current” принимает значения логической 1 или 0 12 разъёма
delay(5);
current = digitalRead(12);
}
return current;
}
void loop()
{
tekButton = testLed(prevButton); // передаем 0 на состояние кнопки
if (tekButton == HIGH && prevButton == LOW);
{
ledOn = !ledOn
}
prevButton = tekButton;
digitalWrite(13, ledOn);
}
Таким образом, в данной статье мы разобрали основной функционал Arduino и научились создавать кнопку-выключатель.