В этой статье решил сделать подборку различных вариантов кода управления кнопкой исполнительными элементами. Это могут быть: светодиод, зуммер, реле и т.п.
НАМ ПОНАДОБИТСЯ
- Плата Arduino Uno.
- Один светодиод.
- Два резистора сопротивлением 220-270 Ом и 100 кОм.
- Кнопка.
- Провода.
- Макетная плата.
СХЕМА ПОДКЛЮЧЕНИЯ
Порт, к которому подключена кнопка, нужно подтянуть к земле через резистор. Чтобы на нем был низкий уровень (LOW).
Можно обойтись без внешнего светодиода с резистором. Т.к. к пину 13 подключен встроенный светодиод.
Вариант 1. Стандартный вариант из примеров.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | const int buttonPin = 2; // Присваиваем имя цифровому выводу 2 "buttonPin" const int ledPin = 13; // Присваиваем имя цифровому выводу 13 "ledPin" int buttonState = 0; // Переменная для чтения статуса кнопки void setup() { pinMode(ledPin, OUTPUT); //Инициализируем цифровой pin 13 как выход pinMode(buttonPin, INPUT); //Инициализируем цифровой pin 2 как вход } void loop() { buttonState = digitalRead(buttonPin); //считывание состояния значения кнопки if (buttonState == HIGH) { //если кнопка нажата (HIGH) digitalWrite(ledPin, HIGH); //включаем светодиод } else { //иначе digitalWrite(ledPin, LOW); //выключаем светодиод } } |
Вариант 2. Используем инвертирование. В данном примере, при удержании кнопки, светодиод будет моргать с частотой задержки
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | const int buttonPin = 2; // Присваиваем имя цифровому выводу 2 "buttonPin" const int ledPin = 13; // Присваиваем имя цифровому выводу 13 "ledPin" int buttonState = 0; // Переменная для чтения статуса кнопки int ledState = 0; // Переменная для чтения статуса светодиода void setup() { pinMode(ledPin, OUTPUT); //Инициализируем цифровой pin 13 как выход pinMode(buttonPin, INPUT); //Инициализируем цифровой pin 2 как вход } void loop() { buttonState = digitalRead(buttonPin); //считывание состояния значения кнопки ledState = digitalRead(ledPin); //считывание состояния значения светодиода if (buttonState == HIGH) { //если кнопка нажата (HIGH) digitalWrite(ledPin, !ledState); //переключаем состояние светодиода delay(200); //задержка. При удержании кнопки в нажатом состоянии, светодиод будет моргать с частотой задержки } } |
Вариант 3. Одно действие при нажатии кнопки с использованием переменной flag. Защита от дребезга.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | int flag=0; void setup(){ pinMode(13, OUTPUT); //Инициализируем цифровой pin 13 как выход pinMode(2, INPUT); //Инициализируем цифровой pin 2 как вход } void loop() { if(digitalRead(2)==LOW&&flag==1)//если кнопка НЕ нажата И переменная flag равна 1, то выполняем следующее действие { flag=0;//переменную flag приравниваем к 0. } if(digitalRead(2)==HIGH&&flag==0)//если кнопка нажата И переменная flag равна 0 , то выполняем следующее действие { digitalWrite(13,!digitalRead(13)); flag=1; //переменную flag приравниваем к 1. } } |
Подправим немного код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | int LedPin = 13; // Подключаем светодиод к порту 13 int ButPin = 2; // Подключаем кнопку к выходу 2 int flag = 0; // флаг состояния void setup() { pinMode(LedPin, OUTPUT); // Инициализируем порт "ledPin" как выходной } void loop() { if(digitalRead(ButPin) == HIGH && flag == 0) { digitalWrite(LedPin, !digitalRead(LedPin)); flag = 1; } if(digitalRead(ButPin) == LOW && flag == 1) { flag = 0; } } |
Вариант 4. Включаем светодиоды по очереди. Используем дополнительную переменную regim
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 71 | int regim=1; int flag=0; void setup() { pinMode(13,OUTPUT); pinMode(12,OUTPUT); pinMode(11,OUTPUT); } void loop() { if(digitalRead(2)==HIGH&&flag==0)//если кнопка нажата и перемення flag равна 0 , то { regim++; flag=1; if(regim>5)//ограничим количество режимов { regim=1;//так как мы используем только одну кнопку, то переключать режимы будем циклично. } } if(digitalRead(2)==LOW&&flag==1)//если кнопка НЕ нажата и переменная flag равна - 1 ,то ... { flag=0;//обнуляем переменную "knopka" } if(regim==1)//первый режим { digitalWrite(13,LOW);//выключаем все светодиоды digitalWrite(12,LOW); digitalWrite(11,LOW); //здесь может быть любое ваше действие } if(regim==2)//второй режим { digitalWrite(11,HIGH);//включае красный светодиод digitalWrite(12,LOW); digitalWrite(13,LOW); //здесь может быть любое ваше действие } if(regim==3)//третий режим { digitalWrite(12,HIGH);//включае зеленый светодиод digitalWrite(13,LOW); digitalWrite(11,LOW); //здесь может быть любое ваше действие } if(regim==4)//четвертый режим { digitalWrite(13,HIGH);//включаем желтый светодиод digitalWrite(12,LOW); digitalWrite(11,LOW); //здесь может быть любое ваше действие } if(regim==5)//пятый режим { digitalWrite(11,HIGH);//включаем все светодиоды одновременно digitalWrite(12,HIGH); digitalWrite(13,HIGH); //здесь может быть любое ваше действие } } |