Переключение режимов светодиодов
- Войдите на сайт для отправки комментариев
Сб, 30/05/2015 - 15:31
int knopka = 2; int diod1 = 13; int diod2 = 12; int diod3 = 11; int diod4 = 10; boolean svet = LOW; boolean posl = false; void setup() { pinMode(knopka, INPUT); pinMode(diod1, OUTPUT); pinMode(diod2, OUTPUT); pinMode(diod3, OUTPUT); pinMode(diod4, OUTPUT); } void loop() { delay(5); if (digitalRead(knopka)==HIGH&&posl==LOW) { svet=!svet; posl=HIGH; if(svet>3) { svet=1; } } if(digitalRead(knopka)==LOW&&posl==HIGH) { posl=LOW; } if(svet==1) { digitalWrite(diod1,LOW); digitalWrite(diod2,LOW); digitalWrite(diod3,LOW); digitalWrite(diod4,LOW); } if(svet==2) { digitalWrite(diod1,HIGH); digitalWrite(diod2,HIGH); } if(svet==3) { digitalWrite(diod3,HIGH); digitalWrite(diod4,HIGH); } }
Добрый день! Подскажите, пожалуйста, где ошибка в коде. Программирование на ардуино только начал осваивать, еще совсем новичек!
Алгоритм, примерно, такой: При нажатии на кнопку должна включаться первая программа(все светодиоды погашены). При последующем нажатии должна включиться вторая программа (загореться диоды на 13 и 12 порту), затем, при третьем нажатии, третья (загореться диоды на 11 и 10 портах), но при нажатии на кнопку ничего не происходит! Помогите, пожалуйста, разобраться в чем проблема!
Принципиальную схему прилагаю
Код в самом верху
Огромное, Вам, спасибо!
А можно как-то сделать, чтоб при зажатии кнопки, светодиоды не мигали?
вместо
нужно
дык по коду они у вас и не мигают)))
дык по коду они у вас и не мигают)))
Как по мне то при нажатой кнопке они будут мигать с частотой delay(20)
Чтобы не мигали нужно вносить дополнительную проверку
ну если вы такую частоту мигания видите, то сделайте антидребезг без делеев и всё)))
Не антидребезг нужен, а фронт нажатия ловить.
За основу можно взять это. http://wiki.amperka.ru/%D0%BA%D0%BE%D0%BD%D1%81%D0%BF%D0%B5%D0%BA%D1%82-...
Без дополнителних библиотек.
Но я бы сделал по другому, проще и нагляднее. Но понадобится библиотека
Можно сделать както так чтобы переключалось только при очередном нажатии
какой смысл в строке 26? Дальше нигде не используется, а в следующем цикле переменная обнуляется.
Когда мы устанавливаем "Flag_keyPress = 1;" больше 22 строчка "if (keyPress==1 && Flag_keyPress==0) // если кнопка нажата"
не срабатывает и state++; остается неизменным пока не отпустим кнопку, строчка 21
ВСЕ большое спасибо!!!
Вот какой у меня, в итоге, получился код
Уважаемые, подскажите, пожалуйста, пользовался кто-то микросхемой 74HC595? Стоит ее покупать для увеличения портов, что бы подключить большее кол-во светодиодов?
vosara, в строке 26 мы устанавливаем Flag_keyPress = 1
Дальше по завершении цикла заново переходим к строке 17. Так вот в этот момент Flag_keyPress ВСЕГДА становится равным нулю, потому как это была локальная переменная.
Кстати, в строке 21 есть несуществующая переменная Flag_keyPressed.
Да верно надо выносить с loop или ставить static
недосмотрел!!
Если не сложно, не могди бы Вы, написать как теперь будет выглядеть код? Очень хочеться довести до совершенства и разобраться
Не проверял но должно быть так:
Не проверял но должно быть так:
Большое спасибо! Все работает прекрасно! Вы не пробовали, когда-то, использовать микросхему 74hc595? Стоит ее покупать для увеличения портов?