Задержка выполнения функции
- Войдите на сайт для отправки комментариев
Сб, 12/09/2015 - 19:01
У меня вопрос по задержке. При падении освещённости загорается светодиод, горит 10 секунд и гаснет. Как это будет с помощью delay понятно. Так же мне понятно, что нужно применить millis. Но написать код никак не получается. Есть куча примеров по millis, но они все связаны с мерцанием, т.е. включением/отключением.
Прошу помочь с кодом.
покажите свои труды - в которых "не получается"
const int ledPin = 3; int ledState = LOW; unsigned long previousMillis = 0; const long interval = 5000; int ldr = A0; // Фоторезистор void setup() { pinMode(ledPin, OUTPUT); digitalWrite(ledPin, LOW); } void loop() { if (analogRead(ldr) < 500) { unsigned long currentMillis = millis(); if(currentMillis - previousMillis >= interval) { previousMillis = currentMillis; digitalWrite(ledPin, HIGH); } } }// const int ledPin = 3; экономим память #define ledPin 3 // int ledState = LOW; экономим память unsigned long sekundomer = 0; // const long interval = 5000; экономим память const int interval = 5000; // int - 0...65535 // int ldr = A0; // Фоторезистор экономим память #define ldr A0 boolean flagLed = false; //============================================================= void setup() { pinMode(ledPin, OUTPUT); digitalWrite(ledPin, LOW); } //============================================================= void loop() { if ( analogRead( ldr ) < 500 && ! flagLed ) { flagLed = true; sekundomer = millis(); digitalWrite( ledPin, HIGH ); } if ( flagLed && millis() - sekundomer > interval ) { digitalWrite( ledPin, LOW ); flagLed = false; } while ( analogRead( ldr ) < 500 && ! flagLed ) { // гистерезис - крутимся пока освещённость не станет более 499 } } //============================================================= // кататак :) - возможна ошибка.....#define ledPin 3 unsigned long sekundomer = 0; const int interval = 5000; #define ldr A0 boolean flagLed = false; //============================================================= void setup() { pinMode(ledPin, OUTPUT); digitalWrite(ledPin, LOW); } //============================================================= void loop() { if ( analogRead( ldr ) < 500 && ! flagLed ) { flagLed = true; sekundomer = millis(); digitalWrite( ledPin, HIGH ); } if ( flagLed && millis() - sekundomer > interval ) { digitalWrite( ledPin, LOW ); flagLed = false; } while ( analogRead( ldr ) < 500 && ! flagLed ) { // гистерезис - крутимся пока освещённость не станет более 499 // это ловушка.... // от повторного включения светодиода до восстановления освещённости // или надо не так ? } } //============================================================= // кататак :) - возможна ошибка.....Код работает. Большое спасибо.
НО , из-за строки 28 программа ничего делать не будет !!!!!!!!!
....будет ждать повышения освещённости - и всё
определите ещё один флаг - "возврат из сумерек на свет" - избавитесь от while() и в лупе можно ещё много полезного будет делать !
...удачи :)