Воскресенье, 02 Ноябрь 2014 22:43

Действия после нажатия кнопки Arduino UNO ATmega 328-P

Автор
Оцените материал
(6 голосов)

В данном примере рассмотрим подключение кнопки и светодиодов к Arduino UNO под управлением процессора ATmega 328-P. Задача в том, чтобы при нажатии на кнопку, она выполняла какую-то функцию. В моем примере это будет переключение режимов свечения светодиодов.

Давайте рассмотрим для начала подробности подключения, схему и т.д.

Как видно из рисунка, схема подключения только для кнопки и одного светодиода, который расположен на 13 пине. Мой пример не состоит из 1 светодиода, у меня их целых 3. Но для того, чтобы было ясно как они работают, я показываю схему подключения одного, для начала.

Для того, чтобы посторить мой пример, я использовал:

  1. Беспаечную макетную плату
  2. Соединительные провода
  3. Резистор на 10 кОм
  4. 3 светодиода
  5. Кнопка

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

Вот как выглядит у меня подключение кнопки:

Вся же конструкция выглядет так:

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

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

Код программы:

int R_LedPin = 13; // Подключаем красный светодиод к порту 13
int G_LedPin = 12; // Подключаем зеленый светодиод к порту 12
int B_LedPin = 11; // Подключаем синий светодиод к порту 11
int ButPin = 10; // Подключаем кнопку к выходу 10
int flag = 0; // флаг состояния
int regim = 0; // Переключалка

void setup()
{
pinMode(R_LedPin, OUTPUT);
pinMode(G_LedPin, OUTPUT);
pinMode(B_LedPin, OUTPUT);
}

void loop()
{
if(digitalRead(ButPin) == HIGH && flag == 0)
{
regim ++;
flag = 1;

if(regim > 7) // Если номер режима превышает требуемого
{ // то отсчет начинается с нуля
regim = 0;
}
}

if(digitalRead(ButPin) == LOW && flag == 1)
{
flag = 0;
}

// ======= Вполняем задачу при выборе режима =======
// РЕЖИМ 0: OFF
if(regim == 0)
{
digitalWrite(R_LedPin, LOW);
digitalWrite(G_LedPin, LOW);
digitalWrite(B_LedPin, LOW);
}

// РЕЖИМ 1: R
if(regim == 1)
{
digitalWrite(R_LedPin, HIGH);
digitalWrite(G_LedPin, LOW);
digitalWrite(B_LedPin, LOW);
}

// РЕЖИМ 2: G
if(regim == 2)
{
digitalWrite(R_LedPin, LOW);
digitalWrite(G_LedPin, HIGH);
digitalWrite(B_LedPin, LOW);
}

// РЕЖИМ 3: B
if(regim == 3)
{
digitalWrite(R_LedPin, LOW);
digitalWrite(G_LedPin, LOW);
digitalWrite(B_LedPin, HIGH);
}

// РЕЖИМ 4: RG
if(regim == 4)
{
digitalWrite(R_LedPin, HIGH);
digitalWrite(G_LedPin, HIGH);
digitalWrite(B_LedPin, LOW);
}

// РЕЖИМ 5: GB
if(regim == 5)
{
digitalWrite(R_LedPin, LOW);
digitalWrite(G_LedPin, HIGH);
digitalWrite(B_LedPin, HIGH);
}

// РЕЖИМ 6: RB
if(regim == 6)
{
digitalWrite(R_LedPin, HIGH);
digitalWrite(G_LedPin, LOW);
digitalWrite(B_LedPin, HIGH);
}

// РЕЖИМ 7: RGB
if(regim == 7)
{
digitalWrite(R_LedPin, HIGH);
digitalWrite(G_LedPin, HIGH);
digitalWrite(B_LedPin, HIGH);
}
}

Сдесь же вместо функции (regim) можно вставлять любую другую.

Выражение "if" - возможно, самая важная инструкция в языке программирования, так как она позволяет компьютеру (а мы помним что Arduino - это маленький компьютер) делать выбор. После ключевого слова "if" вы должны написать "вопрос" в круглых скобках, и если "ответ", или результат, верен, будет выполнен первый блок кода; и напротив, если ответ неверен, будет выполнен блок кода после "else". Обратите внимание, что я использовал символ "==" вместо "=". Первый используется при сравнении двух значений и возвращает "TRUE" (ИСТИНА) или "FALSE" (ЛОЖЬ); второй присваивает значение переменной. Удостоверьтесь что вы пользуетесь ими правильно, так как очень легко совершить подобную ошибку и использовать простое равно. 

Чтобы узнать состояние выключателя, существует новая для нас команда Arduino, которую нам следует изучить: функция digitalRead().

digitalRead() проверяет, подключено-ли напряжение к контакту, который вы указали в скобках, и возвращает значение "HIGH" или "LOW".

С функцией digitalRead() мы можем "задать вопрос" Arduino и получить ответ, который можно сохранить где-нибудь в памяти и принять решение немедленно или позже.

 

Ну и на последок не большая видео презентация того, как все это работает:

Прочитано 18696 раз Последнее изменение Воскресенье, 02 Ноябрь 2014 23:39
Валентин Олегович

Администратор сайта.

linuxmd.net

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

1. Ругательства запрещены
2. Реклама запрещена

Защитный код
Обновить

О нас | Рассылка | Правила сайта | Правила форума | Поиск

При копировании какого-либо контента с сайта, ссылка на источник - ОБЯЗАТЕЛЬНА! В случае несоблюдения данного пункта будет отправлена жалоба на хостинг нарушителя и сайт будет закрыт (или оштрафован) по усмотрению оператора. Верьте в силу копирайта. Основатель портала: Валентин Щербаков 2013 - 2016

Программное обеспечение сайта распространяется по лицензии GNU General Public License.