Arduino урок 3 — Кнопка

В этом примере мы рассмотрим подключение кнопки к контроллеру Arduino. И рассмотрим несколько примеров обработки нажатия.

Для урока понадобятся:

  • Arduino
  • Макетная плата
  • Пара резисторов
  • Кнопка
  • Светодиод
  • Соединительные провода

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

Кнопка и Ардуино

Пример подключения

Arduino урок 3 — Кнопка

Простейший пример, при нажатии светодиод горит.

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);
//здесь может быть любое ваше действие
}

}

 

Поделись с друьями:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *