ребята, помогите разобраться с millis на примере работы помпы. есть часы реального времени и есть помпа. каждый раз когда минуты равны 00 , нужно включить помпу и оставить ее работать на 3 секунды. сначала работало через делей, но во время работы помпы время на дисплее замерало на время работы помпы. могу сделать так чтоб в 00 минут и 00 секунд помпа включалась, а выключалась когда минуты равны 00 и секунды равны 03. но это помоему очень просто. и не очень надежно. хочу сделать на millis , но совсем не умею с ними работать. вот прошу у всех Вас помощи.
стандартный пример Код (C++): const int ledPin = 13; // номер выхода, подключенного к светодиоду // Variables will change: int ledState = LOW; // этой переменной устанавливаем состояние светодиода long previousMillis = 0; // храним время последнего переключения светодиода long interval = 1000; // интервал между включение/выключением светодиода (1 секунда) void setup() { // задаем режим выхода для порта, подключенного к светодиоду pinMode(ledPin, OUTPUT); } void loop() { // здесь будет код, который будет работать постоянно // и который не должен останавливаться на время между переключениями свето unsigned long currentMillis = millis(); //проверяем не прошел ли нужный интервал, если прошел то if(currentMillis - previousMillis > interval) { // сохраняем время последнего переключения previousMillis = currentMillis; // если светодиод не горит, то зажигаем, и наоборот if (ledState == LOW) ledState = HIGH; else ledState = LOW; // устанавливаем состояния выхода, чтобы включить или выключить светодиод digitalWrite(ledPin, ledState); } }
спасибо! разобрался! теперь работает на millis слышал что-то, что счетчик у millis не бесконечный, да еще и ко всему у меня изменена частота ШИМ на ардуине и поэтому 3 секунды у меня получаются равны 100000 милис. сделал следующим образом Код (C++): long interval=100000; if(){ digitalWrite (pomp, HIGH); currentMillis = millis(); } if( (millis() - currentMillis) > interval){ digitalWrite (pomp, LOW); } а что произойдет когда у меня таким образом счетчик милис подойдет к своему заполнению? он обнулится? и есть ли возможность обнулять его всякий раз перед включением помпы?
Это количество сбрасывается на ноль, в следствие переполнения значения, приблизительно через 50 дней. P.S. По сути разницы нету, когда millis переполняется и сбрасывается на 0, то считайте, будто Arduino "заново" начала свою программу. Думаю не стоит волноваться, тем более 50 дней достаточно не мало и, скорее всего, она у вас не один раз перезагрузится
millis() возвращает количество миллисекунд с момента начала выполнения программы. сбрасывается на ноль, в следствие переполнения значения, приблизительно через 50 дней. упс.....опередили
у меня при использовании делей в момент работы помпы на дисплее не обновляются показания времени и температуры
это одна лиш ветка всех многопоточностей на моем устройстве. у меня все работает или по времени или по температуре или по влажности или одновременно все вместе.