Ви не увійшли.
Сторінки 1
Здравствуйте! Собрал из кусочков код новогодней гирлянды, светодиоды подключены к пинам 2-9, кнопка к 10.
Мерцание светодиодов должно меняться после нажатия кнопки, всего три режима. Но на самом деле работает только первый режим, программа на кнопку не реагирует. Прошу помощи у знающих людей...
/*
Мигаем светодиодами на контактах со 2 по 9
*/
// Setup - этот блок выполняется лишь один раз, при запуске скетча
int del=100; // присваиваем переменной "del" значение 100, это будет в дальнейшем являться задержкой в 100 миллисекунд
int switchPin =10;
int val;
int state;
int c;
void setup()
{
  // устанавливаем цыфровые выводы со 2 по 9 как выходы (далее мы рассмотрим как это сделать более простым способом)
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(switchPin, INPUT);
  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
  digitalWrite(7, LOW);
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
}
// блок цикла - данный блок будет повторяться бесконечно, до тех пор пока вы не отключите питание
void loop()
{
  state = digitalRead(switchPin);
  if (state == HIGH && c == 0) // нажали кнопку
  {
    c = 1;
  }
  if (state == LOW && c == 1) // отпустили кнопку
  {
    val = ++val;
    if (val == 2)
    {
      val = 0;
    }
    c = 0;
  }
if (val == 0) // Мигание 1
{
  digitalWrite(2, HIGH);   // включить светодиод на контакте 2
  delay(del);              // выполнить задержку длительностью "del" ("del" как мы помним равна 100 миллисекунд)
  digitalWrite(2, LOW);    // выключить светодиод
  digitalWrite(3, HIGH);   // включить светодиод на контакте 3
  delay(del);              // выполнить задержку
  digitalWrite(3, LOW);    // выключить светодиод
  digitalWrite(4, HIGH);   // включить светодиод на контакте 4
  delay(del);              // выполнить задержку
  digitalWrite(4, LOW);    // выключить светодиод
  digitalWrite(5, HIGH);   // включить светодиод на контакте 5
  delay(del);              // выполнить задержку
  digitalWrite(5, LOW);    // выключить светодиод
  digitalWrite(6, HIGH);   // включить светодиод на контакте 6
  delay(del);              // выполнить задержку
  digitalWrite(6, LOW);    // выключить светодиод
  digitalWrite(7, HIGH);   // включить светодиод на контакте 7
  delay(del);              // выполнить задержку
  digitalWrite(7, LOW);    // выключить светодиод
  digitalWrite(8, HIGH);   // включить светодиод на контакте 8
  delay(del);              // выполнить задержку
  digitalWrite(8, LOW);    // выключить светодиод
  digitalWrite(9, HIGH);   // включить светодиод на контакте 9
  delay(del);              // выполнить задержку
  digitalWrite(9, LOW);    // выключить светодиод
  digitalWrite(8, HIGH);   // включить светодиод на контакте 8
  delay(del);              // выполнить задержку
  digitalWrite(8, LOW);    // выключить светодиод
  digitalWrite(7, HIGH);   // включить светодиод на контакте 7
  delay(del);              // выполнить задержку
  digitalWrite(7, LOW);    // выключить светодиод
  digitalWrite(6, HIGH);   // включить светодиод на контакте 6
  delay(del);              // выполнить задержку
  digitalWrite(6, LOW);    // выключить светодиод
  digitalWrite(5, HIGH);   // включить светодиод на контакте 5
  delay(del);              // выполнить задержку
  digitalWrite(5, LOW);    // выключить светодиод
  digitalWrite(4, HIGH);   // включить светодиод на контакте 4
  delay(del);              // выполнить задержку
  digitalWrite(4, LOW);    // выключить светодиод
  digitalWrite(3, HIGH);   // включить светодиод на контакте 3
  delay(del);              // выполнить задержку
  digitalWrite(3, LOW);    // выключить светодиод
}
 if (val == 1) // Если мы кнопку 1 раз нажали и отпустили
 {
  digitalWrite(2, HIGH);   // включить светодиод на контакте 2
  delay(del);              // выполнить задержку длительностью "del" ("del" как мы помним равна 100 миллисекунд)
  digitalWrite(2, LOW);    // выключить светодиод
  digitalWrite(5, HIGH);   // включить светодиод на контакте 3
  delay(del);              // выполнить задержку
  digitalWrite(5, LOW);    // выключить светодиод
  digitalWrite(3, HIGH);   // включить светодиод на контакте 4
  delay(del);              // выполнить задержку
  digitalWrite(3, LOW);    // выключить светодиод
  digitalWrite(6, HIGH);   // включить светодиод на контакте 5
  delay(del);              // выполнить задержку
  digitalWrite(6, LOW);    // выключить светодиод
  digitalWrite(4, HIGH);   // включить светодиод на контакте 6
  delay(del);              // выполнить задержку
  digitalWrite(4, LOW);    // выключить светодиод
  digitalWrite(7, HIGH);   // включить светодиод на контакте 7
  delay(del);              // выполнить задержку
  digitalWrite(7, LOW);    // выключить светодиод
  digitalWrite(5, HIGH);   // включить светодиод на контакте 8
  delay(del);              // выполнить задержку
  digitalWrite(5, LOW);    // выключить светодиод
  digitalWrite(8, HIGH);   // включить светодиод на контакте 9
  delay(del);              // выполнить задержку
  digitalWrite(8, LOW);    // выключить светодиод
  digitalWrite(6, HIGH);   // включить светодиод на контакте 8
  delay(del);              // выполнить задержку
  digitalWrite(6, LOW);    // выключить светодиод
  digitalWrite(9, HIGH);   // включить светодиод на контакте 7
  delay(del);              // выполнить задержку
  digitalWrite(9, LOW);    // выключить светодиод
  digitalWrite(7, HIGH);   // включить светодиод на контакте 6
  delay(del);              // выполнить задержку
  digitalWrite(7, LOW);    // выключить светодиод
  digitalWrite(8, HIGH);   // включить светодиод на контакте 5
  delay(del);              // выполнить задержку
  digitalWrite(8, LOW);    // выключить светодиод
  digitalWrite(9, HIGH);   // включить светодиод на контакте 4
  delay(del);              // выполнить задержку
  digitalWrite(9, LOW);    // выключить светодиод
  }
  if (val == 2) // Если мы кнопку 2 раз нажали и отпустили
  {
  digitalWrite(2, HIGH);   // включить светодиод на контакте 2
  delay(del);              // выполнить задержку длительностью "del" ("del" как мы помним равна 100 миллисекунд)
  digitalWrite(2, LOW);    // выключить светодиод
  digitalWrite(4, HIGH);   // включить светодиод на контакте 3
  delay(del);              // выполнить задержку
  digitalWrite(4, LOW);    // выключить светодиод
  digitalWrite(6, HIGH);   // включить светодиод на контакте 4
  delay(del);              // выполнить задержку
  digitalWrite(6, LOW);    // выключить светодиод
  digitalWrite(8, HIGH);   // включить светодиод на контакте 5
  delay(del);              // выполнить задержку
  digitalWrite(8, LOW);    // выключить светодиод
  digitalWrite(9, HIGH);   // включить светодиод на контакте 6
  delay(del);              // выполнить задержку
  digitalWrite(9, LOW);    // выключить светодиод
  digitalWrite(7, HIGH);   // включить светодиод на контакте 7
  delay(del);              // выполнить задержку
  digitalWrite(7, LOW);    // выключить светодиод
  digitalWrite(4, HIGH);   // включить светодиод на контакте 8
  delay(del);              // выполнить задержку
  digitalWrite(5, LOW);    // выключить светодиод
  digitalWrite(3, HIGH);   // включить светодиод на контакте 9
  delay(del);              // выполнить задержку
  digitalWrite(3, LOW);    // выключить светодиод
 }
}
Неактивний
Green в теме 
http://forum.arduino.ua/viewtopic.php?id=456
показал возможное ренение
void loop()
{
 if (KeyExe())
 {
  val++;
  if ( val > 2 ) val = 0; 
 }
	
	
if ( val == 0) // Мигание 1
{.
.
.  
}
bool KeyExe()
{
  static bool key_pressed;
  static uint8_t debounce_timer;
  
  if (key_pressed != !digitalRead(switchPin)) {
    key_pressed = !key_pressed;
    debounce_timer = DEBOUNCE_TIME;
  }
  else if (debounce_timer && !--debounce_timer && key_pressed)
    return true;
  return false;
}
  
для начала
а позже переделаете на кол. нажатий за время  Неактивний
Разобрался..
Вот код на три режима
/*
Мигаем светодиодами на контактах со 2 по 9
*/
// Setup - этот блок выполняется лишь один раз, при запуске скетча
int del=200; // присваиваем переменной "del" значение 100, это будет в дальнейшем являться задержкой в 100 миллисекунд
int switchPin =10;
int val;
int state;
int c;
void setup()
{
  // устанавливаем цыфровые выводы со 2 по 9 как выходы (далее мы рассмотрим как это сделать более простым способом)
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(switchPin, INPUT);
  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
  digitalWrite(7, LOW);
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
}
// блок цикла - данный блок будет повторяться бесконечно, до тех пор пока вы не отключите питание
void loop()
{
  state = digitalRead(switchPin);
  if (state == HIGH && c == 0) // нажали кнопку
  {
    c = 1;
  }
  if (state == LOW && c == 1) // отпустили кнопку
  {
    val = ++val;
    if (val == 3)
    {
      val = 0;
    }
    c = 0;
  }
  if (val == 0) // Мигание 1
{
  digitalWrite(2, HIGH);   // включить светодиод на контакте 2
  delay(del);              // выполнить задержку длительностью "del" ("del" как мы помним равна 100 миллисекунд)
  digitalWrite(2, LOW);    // выключить светодиод
  digitalWrite(3, HIGH);   // включить светодиод на контакте 3
  delay(del);              // выполнить задержку
  digitalWrite(3, LOW);    // выключить светодиод
  digitalWrite(4, HIGH);   // включить светодиод на контакте 4
  delay(del);              // выполнить задержку
  digitalWrite(4, LOW);    // выключить светодиод
  digitalWrite(5, HIGH);   // включить светодиод на контакте 5
  delay(del);              // выполнить задержку
  digitalWrite(5, LOW);    // выключить светодиод
  digitalWrite(6, HIGH);   // включить светодиод на контакте 6
  delay(del);              // выполнить задержку
  digitalWrite(6, LOW);    // выключить светодиод
  digitalWrite(7, HIGH);   // включить светодиод на контакте 7
  delay(del);              // выполнить задержку
  digitalWrite(7, LOW);    // выключить светодиод
  digitalWrite(8, HIGH);   // включить светодиод на контакте 8
  delay(del);              // выполнить задержку
  digitalWrite(8, LOW);    // выключить светодиод
  digitalWrite(9, HIGH);   // включить светодиод на контакте 9
  delay(del);              // выполнить задержку
  digitalWrite(9, LOW);    // выключить светодиод
  digitalWrite(8, HIGH);   // включить светодиод на контакте 8
  delay(del);              // выполнить задержку
  digitalWrite(8, LOW);    // выключить светодиод
  digitalWrite(7, HIGH);   // включить светодиод на контакте 7
  delay(del);              // выполнить задержку
  digitalWrite(7, LOW);    // выключить светодиод
  digitalWrite(6, HIGH);   // включить светодиод на контакте 6
  delay(del);              // выполнить задержку
  digitalWrite(6, LOW);    // выключить светодиод
  digitalWrite(5, HIGH);   // включить светодиод на контакте 5
  delay(del);              // выполнить задержку
  digitalWrite(5, LOW);    // выключить светодиод
  digitalWrite(4, HIGH);   // включить светодиод на контакте 4
  delay(del);              // выполнить задержку
  digitalWrite(4, LOW);    // выключить светодиод
  digitalWrite(3, HIGH);   // включить светодиод на контакте 3
  delay(del);              // выполнить задержку
  digitalWrite(3, LOW);    // выключить светодиод
}
 if (val == 1) // Если мы кнопку 1 раз нажали и отпустили
 {
  digitalWrite(2, HIGH);   // включить светодиод на контакте 2
  delay(del);              // выполнить задержку длительностью "del" ("del" как мы помним равна 100 миллисекунд)
  digitalWrite(2, LOW);    // выключить светодиод
  digitalWrite(9, HIGH);   // включить светодиод на контакте 3
  delay(del);              // выполнить задержку
  digitalWrite(9, LOW);    // выключить светодиод
  digitalWrite(3, HIGH);   // включить светодиод на контакте 4
  delay(del);              // выполнить задержку
  digitalWrite(3, LOW);    // выключить светодиод
  digitalWrite(8, HIGH);   // включить светодиод на контакте 5
  delay(del);              // выполнить задержку
  digitalWrite(8, LOW);    // выключить светодиод
  digitalWrite(4, HIGH);   // включить светодиод на контакте 6
  delay(del);              // выполнить задержку
  digitalWrite(4, LOW);    // выключить светодиод
  digitalWrite(7, HIGH);   // включить светодиод на контакте 7
  delay(del);              // выполнить задержку
  digitalWrite(7, LOW);    // выключить светодиод
 digitalWrite(5, HIGH);   // включить светодиод на контакте 7
  delay(del);              // выполнить задержку
  digitalWrite(5, LOW);    // выключить светодиод
 digitalWrite(6, HIGH);   // включить светодиод на контакте 7
  delay(del);              // выполнить задержку
  digitalWrite(6, LOW);    // выключить светодиод
  
  }
  if (val == 2) // Если мы кнопку 2 раз нажали и отпустили
  {
  digitalWrite(2, HIGH);   // включить светодиод на контакте 2
  digitalWrite(3, HIGH);   // включить светодиод на контакте 3
   digitalWrite(4, HIGH);   // включить светодиод на контакте 4
digitalWrite(5, HIGH);   // включить светодиод на контакте 5
digitalWrite(6, HIGH);   // включить светодиод на контакте 5
   digitalWrite(7, HIGH);   // включить светодиод на контакте 5
 digitalWrite(8, HIGH);   // включить светодиод на контакте 6
   digitalWrite(9, HIGH);   // включить светодиод на контакте 7
  delay(del);              // выполнить задержку длительностью "del"
 digitalWrite(2, LOW);   // выключить светодиод на контакте 2
  digitalWrite(3, LOW);   // выключить светодиод на контакте 3
   digitalWrite(4, LOW);   // выключить светодиод на контакте 4
digitalWrite(5, LOW);   // выключить светодиод на контакте 5
digitalWrite(6, LOW);   // выключить светодиод на контакте 5
   digitalWrite(7, LOW);   // выключить светодиод на контакте 5
 digitalWrite(8, LOW);   // выключить светодиод на контакте 6
   digitalWrite(9, LOW);   // выключить светодиод на контакте 7
delay(del);              // выполнить задержку длительностью "del"
 
 }
}Неактивний
"Так значит можешь, если захочешь!"
это просто отлично что TS разобрался. он молодец 
но надеюсь новички никогда не увидят этот пост. 
учится нужно не только на работающем коде, но и на "красивом".
Ваш пример очень хорош. тот факт что TS его проигнорировал, меня печалит, ибо следующая тема возможно будет - как избавится от дребезга.
add
в данном коде дребезга не будет ибо сразу идет на выполнение, но возможны случайные переходы на следующий алгоритм в процессе работы )
или как сделать что бы можно было переключить в середине выполнения (
Остання редакція NoName (2016-04-25 09:36:05)
Неактивний
Иной раз, взглянув на код, сразу же хочется его закрыть со словами "глаза б мои никогда этого не видели б!"((
но разговор идет не о этом коде, парень молодец, он сделал свою цяцьку
но если кто то захочет повторить, то будет думать что так и нада
а с другой стороны врядли кто то читает чужие темы )
Неактивний
Vik300001, забейте на светодиоды 
если есть желание сделать классную гирлянду - посмотрите на ленту 
у меня была корпусирована (прозрачная трубка), но она немного дороже, 
пример на ардуино:
http://www.getchip.net/posts/122-ehffek … tu-ws2812/
только обязательно смотрите без буквы b они высокоскоросные, проблем не оберетесь 
лента позволит Вам сделать действительно уникальную гирлянду и она будет шикарна.
успехов!
Неактивний
Сторінки 1