Police flash или снова мигаем без delay
- Войдите на сайт для отправки комментариев
Для своего бота стал делать проблесковый маячек. Идея была в том, что светодиоды я планирую сделать линейку красных и линейку синих, напрямую к Arduino такое кол-во цеплять нецелесообразно и я подумал использовать под эту тему драйвер двигателей L293d. Получается на один мост я могу зацепить красные с одной полярностью, а синии с обратной, далее Arduino будет подавать серии вспышек то на красные, то на синие, попарно меняя HIGH и LOW. Надеюсь, правильно все изложил.
На второй мост хочу таким же образом зацепить "фары" и ИК-подсветку камеры, но там мигать уже ничего не будет и эту часть реализовать проблем нет.
Так вот, за основу я взял всем известный пример http://arduino.ru/forum/programmirovanie/eshche-raz-migaem-svetodiodom-bez-delay#comment-40693
Напильником подпилил до такого:
#define RED 22 #define BLUE 24 #define LOW_INTERVAL 300 // сколько времени выдавать LOW #define HIGH_INTERVAL 250 // сколько времени выдавать HIGH byte count_flash=0; boolean change = false; void setup() { pinMode(RED, OUTPUT); pinMode(BLUE, OUTPUT); } void loop() { flashing(); } void flashing() { if (change = true) red_flash(); if (change = false) blue_flash(); } void red_flash() { static unsigned long period= LOW_INTERVAL; // текущий интервал мигания static unsigned long prevMillis=0; count_flash++; if( (millis()-prevMillis)>=period) { prevMillis=millis(); digitalWrite(RED,!digitalRead(RED)); period=(period==LOW_INTERVAL)?HIGH_INTERVAL: LOW_INTERVAL; // чередуем LOW_INTERVAL/HIGH_INTERVAL } if (count_flash == 5) { change = false; count_flash = 0; } } void blue_flash() { static unsigned long period= LOW_INTERVAL; // текущий интервал мигания static unsigned long prevMillis=0; count_flash++; if( (millis()-prevMillis)>=period) { prevMillis=millis(); digitalWrite(BLUE,!digitalRead(BLUE)); period=(period==LOW_INTERVAL)?HIGH_INTERVAL: LOW_INTERVAL; // чередуем LOW_INTERVAL/HIGH_INTERVAL } if (count_flash == 5) { change = true; count_flash = 0; } }
Затупил я на следующем шаге - пин красный и пин синий должны попарно менять HIGH / LOW на LOW / HIGH, в зависимости от того какой цвет сейчас "блинкует". Чувствую, что что-то простое, а никак не могу допинать. В связи с чем и прошу помощи.
Чутка дописал и приложил рисунок
На рисунке диоды = светодиоды.
2 maksim - гениально! Мои благодарности!