понедельник, 15 декабря 2014 г.

Новогодняя горка ARDUINO за один вечер

Всем привет.
Наверное у многих на окне в новогоднюю ночь стоит пирамидка 
Лично мне она уже надоела, и я решил ее переделать. Чтобы была никак у всех. Люблю выделятся (выделываться).
Задумка следующая. Горит как обычно минут 15-20, потом бац и какой нибудь прикол, типа бегущего огонька или постепенного погасания. Если сосед спросит: "Чё такое?", скажу: "А бес его знает, наверно свет моргает:)". Пускай голову ломает.

Итак за дело. Потребуется 7 светодиодов (самые хитрые все лето ковыряли зажигалки), 7 резисторов на 150-220 Ом, обрезки проводов, термоусадок, колодка на 7 пинов и собственно ARDUINO.
К длинному выводу (+) каждого светодиода припаиваем сопротивление, затем отрезок провода. Семь проводов собираем на колодке
Короткие выводы отрезками проводов спаиваем вместе, и делаем провод для подключения к GND




Подключаем к ARDUINO по следующей схеме.


Загружаем простой скетч и проверяем работу. Скетч написан ну совсем по простому. Любой новичок сможет разобрать принцип и внести свои изменения. После всех настроек можно заменить паузу 
delay (2222); 
на побольше, например 
delay (1200000); 
(20 мин из расчета 1000 = 1 сек) 
У меня было плата LEONARDO в паре с зарядкой от смартфона (microUSB) 
Ну вот вроде и все. 
С наступающим новым годом !!!


// New Year (С)2014 ALEN Studio by Little_Red_Rat

void setup() 
// описываем 0-6 контакты ARDUINO как выход и подаем '1', светодиод горит
{
  for (int i=0; i<7; i++)
  {
    pinMode(i,OUTPUT);
    digitalWrite(i, HIGH);
  }
}

void loop() {
  // все гаснут по одной
  for (int i=0; i<7; i++)
  {
    digitalWrite(i,LOW);
    delay (1500);
  }
  // загораются по одной  
  for (int i=0; i<7; i++)
  {
    digitalWrite(i,HIGH);
    delay (1500);
  }
  // большая пауза, все горят    
  delay (2222);
  //бегущий гаснет 2 раза в обе стороны
  for (int i=0; i<7; i++)
  {
    digitalWrite(i,LOW);
    delay (500);
    digitalWrite(i,HIGH);
  }
  for (int i=5; i>-1; i--)
  {
    digitalWrite(i,LOW);
    delay (500);
    digitalWrite(i,HIGH);
  }
  for (int i=1; i<7; i++)
  {
    digitalWrite(i,LOW);
    delay (500);
    digitalWrite(i,HIGH);
  }
  for (int i=5; i>-1; i--)
  {
    digitalWrite(i,LOW);
    delay (500);
    digitalWrite(i,HIGH);
  }
  // большая пауза, все горят    
  delay (2222);
  // гаснут снизу парами   
  digitalWrite(0,LOW);
  digitalWrite(6,LOW);
  delay (1500);
  digitalWrite(1,LOW);
  digitalWrite(5,LOW);
  delay (1500);
  digitalWrite(2,LOW);
  digitalWrite(4,LOW);
  delay (1500);
  digitalWrite(3,LOW);
  delay (1500);
  //загораются сверху парами    
  digitalWrite(3,HIGH);
  delay (1500);
  digitalWrite(2,HIGH);
  digitalWrite(4,HIGH);
  delay (1500);
  digitalWrite(1,HIGH);
  digitalWrite(5,HIGH);
  delay (1500);
  digitalWrite(0,HIGH);
  digitalWrite(6,HIGH);
  // большая пауза, все горят    
  delay (2222);
  // бегущий сверкающий огонек один раз в одну сторону
  for (int i=0; i<7; i++)
  {
    digitalWrite(i,LOW);
    delay (100);
    digitalWrite(i,HIGH);
    delay (100);
    digitalWrite(i,LOW);
    delay (100);
    digitalWrite(i,HIGH);
    delay (100);
    digitalWrite(i,LOW);
    delay (100);
    digitalWrite(i,HIGH);
    delay (100);
  } 
  // большая пауза, все горят    
  delay (2222);  
  // все гаснут
  for (int i=0; i<7; i++)
  {
    digitalWrite(i,LOW);
  }
  // загорается бегущий 5 раз в обе стороны 
  for (int y=0; y<6; y++)
  {
    for (int i=0; i<7; i++)
    {
      digitalWrite(i,HIGH);
      delay (50);
      digitalWrite(i,LOW);
    } 
    delay (50);
    for (int i=6; i>-1; i--)
    {
      digitalWrite(i,HIGH);
      delay (50);
      digitalWrite(i,LOW);
    } 
    delay (50);
  }
  // все горят
  for (int i=0; i<7; i++)
  {
    digitalWrite(i,HIGH);
  } 
  // большая пауза, все горят    
  delay (2222);   

}