Гирлянда на Arduino version 2.0
Вот еще одна гирлянда на Arduino.
В прошлой статье мы с вами разрабатывали гирлянду, которая переключала эффекты с помощью одной кнопки. В этой статье мы будем рассматривать гирлянду, которая имеет 5 кнопок и 5 эффектов. Каждой кнопке свой эффект.
Техническое задание
Разработать устройство гирлянды на Arduino, состоящее из 5 светодиодов и 5 кнопок. Для каждой кнопки разработать свой эффект моргания светодиодов. При подаче питания на Arduino в изначальном состоянии не горит ни один светодиод. При нажатии кнопки №1 мы имеем первый эффект. При нажатии кнопки №2 — второй эффект, при нажатии кнопки №3 — третий эффект и тд. Всего 5 кнопок и 5 эффектов.
Итак, схема в Proteus будет выглядеть вот таким образом:
Код программы
uint8_t L=0; //Объявляем глобальную переменную L, и присваиваем ей значение 0.
int B; //Объявляем глобальную переменную В.
void setup() {
// Конфигурируем цифровые выводы под номерами 3,4,5,6,7 на выход.
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
// Конфигурируем аналоговые выводы как цифровые, под номерами A1, A2, A3, A4, A5 на вход.
pinMode(A1, INPUT);
pinMode(A2, INPUT);
pinMode(A3, INPUT);
pinMode(A4, INPUT);
pinMode(A5, INPUT);
digitalWrite(A1, HIGH); //Притягиваем 8 вывод к едлинице.
digitalWrite(A2, HIGH); //Притягиваем 8 вывод к едлинице.
digitalWrite(A3, HIGH); //Притягиваем 8 вывод к едлинице.
digitalWrite(A4, HIGH); //Притягиваем 8 вывод к едлинице.
digitalWrite(A5, HIGH); //Притягиваем 8 вывод к едлинице.
}
// Пишем программу которая будет крутиться в бесконечном цикле,
//пока мы не нажмем кнопку Reset, или не подадим питание заново.
void loop()
{
if( L == 0 )
{
B=L; L=Nomer_Effekta(); if(B != L){return;}
/*Сохраняем значение переменной L,в переменной В.
Вызываем значение из функции, и присваиваем его переменной L.
Если номер эффекта, был изменен, выход в основной цикл. */
B=L; L=Nomer_Effekta(); if(B != L){return;}
digitalWrite(7, LOW);
digitalWrite(6, LOW);
digitalWrite(5, LOW);
digitalWrite(4, LOW);
digitalWrite(3, LOW);
delay(100);
}
if( L == 1 )
{
B=L; L=Nomer_Effekta(); if(B != L){return;}
/*Сохраняем значение переменной L,в переменной В.
Вызываем значение из функции, и присваиваем его переменной L.
Если номер эффекта, был изменен, выход в основной цикл. */
digitalWrite(7, LOW); //Включаем эффект гирлянды.
digitalWrite(6, LOW);
digitalWrite(5, LOW);
digitalWrite(4, LOW);
digitalWrite(3, HIGH);
delay(100);
B=L; L=Nomer_Effekta(); if(B != L){return;}
digitalWrite(7, LOW);
digitalWrite(6, LOW);
digitalWrite(5, LOW);
digitalWrite(4, HIGH);
digitalWrite(3, LOW);
delay(100);
B=L; L=Nomer_Effekta(); if(B != L){return;}
digitalWrite(7, LOW);
digitalWrite(6, LOW);
digitalWrite(5, HIGH);
digitalWrite(4, LOW);
digitalWrite(3, LOW);
delay(100);
B=L; L=Nomer_Effekta(); if(B != L){return;}
digitalWrite(7, LOW);
digitalWrite(6, HIGH);
digitalWrite(5, LOW);
digitalWrite(4, LOW);
digitalWrite(3, LOW);
delay(100);
B=L; L=Nomer_Effekta(); if(B != L){return;}
digitalWrite(7, HIGH);
digitalWrite(6, LOW);
digitalWrite(5, LOW);
digitalWrite(4, LOW);
digitalWrite(3, LOW);
delay(100);
}
if( L == 2 )
{
B=L; L=Nomer_Effekta(); if(B != L){return;}
digitalWrite(7, HIGH);
digitalWrite(6, LOW);
digitalWrite(5, LOW);
digitalWrite(4, LOW);
digitalWrite(3, LOW);
delay(100);
B=L; L=Nomer_Effekta(); if(B != L){return;}
digitalWrite(7, LOW);
digitalWrite(6, HIGH);
digitalWrite(5, LOW);
digitalWrite(4, LOW);
digitalWrite(3, LOW);
delay(100);
B=L; L=Nomer_Effekta(); if(B != L){return;}
digitalWrite(7, LOW);
digitalWrite(6, LOW);
digitalWrite(5, HIGH);
digitalWrite(4, LOW);
digitalWrite(3, LOW);
delay(100);
B=L; L=Nomer_Effekta(); if(B != L){return;}
digitalWrite(7, LOW);
digitalWrite(6, LOW);
digitalWrite(5, LOW);
digitalWrite(4, HIGH);
digitalWrite(3, LOW);
delay(100);
B=L; L=Nomer_Effekta(); if(B != L){return;}
digitalWrite(7, LOW);
digitalWrite(6, LOW);
digitalWrite(5, LOW);
digitalWrite(4, LOW);
digitalWrite(3, HIGH);
delay(100);
}
if( L == 3 )
{
B=L; L=Nomer_Effekta(); if(B != L){return;}
digitalWrite(7, HIGH);
digitalWrite(3, HIGH);
delay(100);
B=L; L=Nomer_Effekta(); if(B != L){return;}
digitalWrite(7, LOW);
digitalWrite(3, LOW);
delay(100);
B=L; L=Nomer_Effekta(); if(B != L){return;}
digitalWrite(6, HIGH);
digitalWrite(4, HIGH);
delay(100);
B=L; L=Nomer_Effekta(); if(B != L){return;}
digitalWrite(6, LOW);
digitalWrite(4, LOW);
B=L; L=Nomer_Effekta(); if(B != L){return;}
digitalWrite(5, HIGH);
delay(100);
B=L; L=Nomer_Effekta(); if(B != L){return;}
digitalWrite(5, LOW);
}
if( L == 4 )
{
B=L; L=Nomer_Effekta(); if(B != L){return;}
digitalWrite(7, HIGH);
digitalWrite(6, LOW);
digitalWrite(5, HIGH);
digitalWrite(4, LOW);
digitalWrite(3, HIGH);
delay(100);
B=L; L=Nomer_Effekta(); if(B != L){return;}
digitalWrite(7, LOW);
digitalWrite(6, HIGH);
digitalWrite(5, LOW);
digitalWrite(4, HIGH);
digitalWrite(3, LOW);
delay(100);
B=L; L=Nomer_Effekta(); if(B != L){return;}
digitalWrite(7, HIGH);
digitalWrite(6, LOW);
digitalWrite(5, HIGH);
digitalWrite(4, LOW);
digitalWrite(3, HIGH);
delay(100);
B=L; L=Nomer_Effekta(); if(B != L){return;}
digitalWrite(7, HIGH);
digitalWrite(6, HIGH);
digitalWrite(5, HIGH);
digitalWrite(4, HIGH);
digitalWrite(3, LOW);
delay(100);
B=L; L=Nomer_Effekta(); if(B != L){return;}
digitalWrite(7, HIGH);
digitalWrite(6, HIGH);
digitalWrite(5, HIGH);
digitalWrite(4, HIGH);
digitalWrite(3, HIGH);
delay(100);
}
if( L == 5 )
{
B=L; L=Nomer_Effekta(); if(B != L){return;}
digitalWrite(7, HIGH);
digitalWrite(6, LOW);
digitalWrite(5, LOW);
digitalWrite(4, LOW);
digitalWrite(3, LOW);
delay(100);
B=L; L=Nomer_Effekta(); if(B != L){return;}
digitalWrite(7, HIGH);
digitalWrite(6, HIGH);
digitalWrite(5, LOW);
digitalWrite(4, LOW);
digitalWrite(3, LOW);
delay(100);
B=L; L=Nomer_Effekta(); if(B != L){return;}
digitalWrite(7, HIGH);
digitalWrite(6, HIGH);
digitalWrite(5, HIGH);
digitalWrite(4, LOW);
digitalWrite(3, LOW);
delay(100);
B=L; L=Nomer_Effekta(); if(B != L){return;}
digitalWrite(7, HIGH);
digitalWrite(6, HIGH);
digitalWrite(5, HIGH);
digitalWrite(4, HIGH);
digitalWrite(3, LOW);
delay(100);
B=L; L=Nomer_Effekta(); if(B != L){return;}
digitalWrite(7, HIGH);
digitalWrite(6, HIGH);
digitalWrite(5, HIGH);
digitalWrite(4, HIGH);
digitalWrite(3, HIGH);
delay(100);
B=L; L=Nomer_Effekta(); if(B != L){return;}
digitalWrite(7, HIGH);
digitalWrite(6, HIGH);
digitalWrite(5, HIGH);
digitalWrite(4, HIGH);
digitalWrite(3, LOW);
delay(100);
B=L; L=Nomer_Effekta(); if(B != L){return;}
digitalWrite(7, HIGH);
digitalWrite(6, HIGH);
digitalWrite(5, HIGH);
digitalWrite(4, LOW);
digitalWrite(3, LOW);
delay(100);
B=L; L=Nomer_Effekta(); if(B != L){return;}
digitalWrite(7, HIGH);
digitalWrite(6, HIGH);
digitalWrite(5, LOW);
digitalWrite(4, LOW);
digitalWrite(3, LOW);
B=L; L=Nomer_Effekta(); if(B != L){return;}
digitalWrite(7, HIGH);
digitalWrite(6, LOW);
digitalWrite(5, LOW);
digitalWrite(4, LOW);
digitalWrite(3, LOW);
delay(100);
B=L; L=Nomer_Effekta(); if(B != L){return;}
digitalWrite(7, LOW);
digitalWrite(6, LOW);
digitalWrite(5, LOW);
digitalWrite(4, LOW);
digitalWrite(3, LOW);
delay(100);
}
}
int Nomer_Effekta() //Объявляем функцию.
{ int D; //Объявляем переменную D.
D=L; //Присваиваем переменной D, значение переменной L.
if(digitalRead(A1) == LOW){delay(500);D=1; //Опрашиваем кнопку на нажатие, и присваиваем значение переменной D.
digitalWrite(7, LOW); //Гасим светодиоды, при смене эффекта.
digitalWrite(6, LOW);
digitalWrite(5, LOW);
digitalWrite(4, LOW);
digitalWrite(3, LOW);}
if(digitalRead(A2) == LOW){delay(500);D=2;
digitalWrite(7, LOW);
digitalWrite(6, LOW);
digitalWrite(5, LOW);
digitalWrite(4, LOW);
digitalWrite(3, LOW);}
if(digitalRead(A3) == LOW){delay(500);D=3;
digitalWrite(7, LOW);
digitalWrite(6, LOW);
digitalWrite(5, LOW);
digitalWrite(4, LOW);
digitalWrite(3, LOW);}
if(digitalRead(A4) == LOW){delay(500);D=4;
digitalWrite(7, LOW);
digitalWrite(6, LOW);
digitalWrite(5, LOW);
digitalWrite(4, LOW);
digitalWrite(3, LOW);}
if(digitalRead(A5) == LOW){delay(500);D=5;
digitalWrite(7, LOW);
digitalWrite(6, LOW);
digitalWrite(5, LOW);
digitalWrite(4, LOW);
digitalWrite(3, LOW);}
return D;
}
Работа в железе
Ну и, как обычно, прикрепляю все файлы проекта.

