В этом примере мы рассмотрим подключение кнопки к контроллеру Arduino. И рассмотрим несколько примеров обработки нажатия.
Для урока понадобятся:
- Arduino
- Макетная плата
- Пара резисторов
- Кнопка
- Светодиод
- Соединительные провода
Нужно обратить внимание на, что кнопка подключается с подтягивающим резистором. Это нужно для того чтобы не было ложных срабатываний кнопки и придать ей стабильный сигнал.
Пример подключения
Простейший пример, при нажатии светодиод горит.
int LED = 13; // подключаем светодиод int knopka = 2; // подключаем кнопку void setup(){ pinMode(LED,OUTPUT); // пин 13 на выход pinMode(knopka, INPUT); // пин 2 на вход } void loop(){ if (digitalRead(knopka)==HIGH){ // если кнопка зажата digitalWrite(LED, HIGH);// включаем светодион } else{ digitalWrite(LED,LOW);// иначе, выключаем светодиод }}
Поменяв несколько значений, светодиод будет всегда гореть пока не зажать кнопку
void loop(){ if (digitalRead(knopka)==LOW){ digitalWrite(LED, HIGH); } else{ digitalWrite(LED,LOW); }}
Следующий код позволит отслеживать действия кнопки в мониторе порта
int knop=2; void setup(){ pinMode(knop, INPUT); Serial.begin(9600); // задаем скорость для связи } void loop(){ if (digitalRead(knop)==HIGH){ // если кнопка зажата... Serial.println("ON");} // отправляем на монитор "ON" if (digitalRead(knop)==LOW){ Serial.println("OFF");} }
Следующим примером будет выступать такая логика: нажатие кнопки (не удерживание) — светодиод загорелся, еще раз нажали- светодиод потух. Хочу отметить, что во время этих уроков я и сам учусь, и с этим примером пришлось напрячь мозги и рассуждать только логикой.
int flag=0; void setup() { pinMode(13, OUTPUT); } void loop() { if(digitalRead(14)==HIGH&&flag==0)//если кнопка нажата // и перемення flag равна 0 , то ... { digitalWrite(13,!digitalRead(13)); flag=1; //это нужно для того что бы с каждым нажатием кнопки //происходило только одно действие // плюс защита от "дребезга" 100% } if(digitalRead(14)==LOW&&flag==1)//если кнопка НЕ нажата //и переменная flag равна - 1 ,то ... { flag=0;//обнуляем переменную flag } }
Еще немного изменим код и получим несколько действий, в данном случае 4.
int regim=1; int flag=0; void setup() { pinMode(10,OUTPUT); pinMode(9,OUTPUT); } void loop() { if(digitalRead(14)==HIGH&&flag==0)//если кнопка нажата // и перемення flag равна 0 , то ... { regim++; flag=1; //это нужно для того что бы с каждым нажатием кнопки //происходило только одно действие // плюс защита от "дребезга" 100% if(regim>4)//ограничим количество режимов { regim=1;//так как мы используем только одну кнопку, // то переключать режимы будем циклично } } if(digitalRead(14)==LOW&&flag==1)//если кнопка НЕ нажата //и переменная flag равна - 1 ,то ... { flag=0;//обнуляем переменную "knopka" } if(regim==1)//первый режим { digitalWrite(9,LOW);//выключаем все светодиоды digitalWrite(10,LOW); //здесь может быть любое ваше действие } if(regim==2)//второй режим { digitalWrite(10,HIGH);//включае красный светодиод digitalWrite(9,LOW); //здесь может быть любое ваше действие } if(regim==3)//третий режим { digitalWrite(9,HIGH);//включае зеленый светодиод digitalWrite(10,LOW); //здесь может быть любое ваше действие } if(regim==4)//четвертый режим { digitalWrite(9,HIGH);//включаем светодиоды одновременно digitalWrite(10,HIGH); //здесь может быть любое ваше действие } }