Гирлянда на Arduino version 2.0

0
girlyanda

Вот еще одна гирлянда на Arduino.

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

Техническое задание

Разработать устройство гирлянды на Arduino, состоящее из 5 светодиодов и 5 кнопок. Для каждой кнопки разработать свой эффект моргания светодиодов. При подаче питания на Arduino в изначальном состоянии не горит ни один светодиод. При нажатии кнопки №1 мы имеем первый эффект. При нажатии кнопки №2 — второй эффект, при нажатии кнопки №3 — третий эффект и тд. Всего 5 кнопок и 5 эффектов.

Итак, схема в Proteus будет выглядеть вот таким образом:

Гирлянда на Arduino version 2.0

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

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;
}

Работа в железе

Ну и, как обычно, прикрепляю все файлы проекта.

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