Ви не увійшли.
Сторінки 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