Мигание диодом 4 секунды по условию
- Войдите на сайт для отправки комментариев
Втр, 07/06/2016 - 09:07
Здравствуйте!
Пытаюсь научиться использовать мигание диодов без delay().
Не приложу ума как реализовать следующее:
При изменении состояния диода 1, диод 2 должен мигать 4 секунды с частотой 3 Гц.
Заранее благодарю.
Не приложу ума как реализовать следующее:
Эо утверждение. Оно принято к сведению. А вопрос-то в чём?
Не приложу ума как реализовать следующее:
Эо утверждение. Оно принято к сведению. А вопрос-то в чём?
Как при изменении состояния диода 1, а именно LOW или HIGH заставить диод 2 моргать 4 секунды с требуемой частотой (3 Гц)?
Здравствуйте!
Пытаюсь научиться использовать мигание диодов без delay().
Не приложу ума как реализовать следующее:
При изменении состояния диода 1, диод 2 должен мигать 4 секунды с частотой 3 Гц.
Заранее благодарю.
ну а что заставляет светодиод 1 менять состояние ?
Как при изменении состояния диода 1, а именно LOW или HIGH заставить диод 2 моргать 4 секунды с требуемой частотой (3 Гц)?
Ну, как брать и моргать.
Вы как пробовали? Свой код можете показать?
Если нет кода, то словами можете чётко по пунктам расписать последовательность действий?
Если можете, то 1) распишите и 2) запишите это в виде кода. И уж потом. если не получится, то пишите сюда.
А так - когда Вы сами ничего не делали, Вам тут вряд ли помогут. Хотите, чтобы сделали за Вас, идите в раздел "Ищу исполнителя", там заплатите и Вам сделают.
Использовал вместо таймера milis() счетчик цикла программы.
int Button = 10; int LedG = 7; // горит, при нажатии на кнопку int LedO = 4; // горит по умолчанию int LedR = 3; // должен мигать 4 секунды или 4 цикла byte I = 0; // счетчик void setup() { pinMode(LedG, OUTPUT); pinMode(LedO, OUTPUT); pinMode(LedR, OUTPUT); pinMode(Button, INPUT); Serial.begin(9600); } void loop() { if (digitalRead(Button) == HIGH) { digitalWrite(LedG, HIGH); digitalWrite(LedO, LOW); } else { digitalWrite(LedO, HIGH); digitalWrite(LedG, LOW); } if (digitalRead(LedG) == HIGH) { I++; if (I>0 && I<30) { digitalWrite(LedR, HIGH); } // счетчик циклов и условия мигания else if (I>20 && I<60) { digitalWrite(LedR, LOW); } else if (I>50 && I<80) { digitalWrite(LedR, HIGH); } else if (I>70 && I<110) { digitalWrite(LedR, LOW); } else if (I>100 && I<130) { digitalWrite(LedR, HIGH); } else if (I>120 && I<160) { digitalWrite(LedR, LOW); } else { I=0; digitalWrite(LedR, LOW);} } else I=0; Serial.println(I); }опа, вот уже и кнопка появилась)))))
Да мне понять бы смысл и логику работы, а там уже допру своими силами. Условие не важно какое будет.
Важно для меня чтобы после какого-либо действия диод перемигивал в течении 4 секунд.
при нажатии кнопки запускаете таймер и мигаете светиком
по истечении 4 сек тушите светик
Все верно, милорд, vvadim.
Но вот как программно это исполнить?
В виду того, что я отрезаю вариант с delay() мне остается принимать либо milis() для работы, либо попытаться разобраться как интервал в 4 секунды впихнуть, допустим, вот в такой код:
long previousMillis = 0; byte I=0; void setup() { pinMode(4, OUTPUT); pinMode(10, INPUT); } void loop() { if(digitalRead(10)==HIGH) // если кнопка нажималась { if (millis() - previousMillis >500) { previousMillis = millis(); I++; // я не знаю как тут завязать цикл в 4 мигания, или 4 секунды 4 Гц оповещение засунуть } } else { I=0; } if(I>=5) { digitalWrite(4,!digitalRead(4)); // инвертируем состояние пина I=0; } }Осмелюсь предложить свой вариант:
void loop() { static unsigned long previousMillis; static bool blinkLedR; static byte blinkCount; if (digitalRead(Button) == HIGH){ digitalWrite(LedG, HIGH); digitalWrite(LedO, LOW); digitalWrite(LedR, HIGH); previousMillis = millis(); blinkLedR = true; blinkCount = 0; } else { digitalWrite(LedO, HIGH); digitalWrite(LedG, LOW); } if (blinkLedR){ if (millis() - previousMillis >= 333){ previousMillis = millis(); if (blinkCount < 12)){ digitalWrite(LedR, !digitalRead(LedR)); blinkCount++; } else { digitalWrite(LedR, LOW); blinkLedR = false; } } } }Гражданин fogary, ах если бы было возможно и был я Якубовичем, то воскликнул бы в тот же миг:
"И он выигрывает СсссуПпер Приз! Ааааавтомобиль!"
Все достаточно доступно и понятно на Вашем примере. Алгоритм ясен. Не додумался до этого как совместить работу со счетчиком с помощью переменной и таймер времени milis(), Превысокомногоблагодарен, fogary!
Задача решена.
Также выражаю благодарность Всем Лицам, принявшим участие в беседе!