Переполнение millis()
- Войдите на сайт для отправки комментариев
Втр, 11/10/2016 - 11:02
Добрый день.
Знаю подобные тему уже не раз обсуждались, но все равно никак не могу разобраться.
Есть код:
void loop() { int trig=analogRead(fridge_btn); //читаем "сигнал" ,на аналоговом порту А0, с концевика холодильника: 0-дверь открыта(0В), 50-дверь закрыта(5В) trig=map(trig,0,1023,0,50); if (trig < 10) //если дверь открыли { alert=1; //взводим флаг currentMillis = millis() - previousMillis; //начинаем отсчет таймера if(currentMillis<=INTERVAL) //сравниваем с величиной INTERVAL заданной вначале { //Serial.println(currentMillis); //для отладки пишем пройденное время таймера в порт //digitalWrite(led,HIGH); } if (currentMillis >= INTERVAL) //если время все таки вышло { tone(piezo, 440, 250); delay(250); tone(piezo, 165, 250); delay(250); tone(piezo, 440, 250); delay(250); delay(250); noTone(piezo); //Serial.println("Time alert!Door open"); } } else { previousMillis = millis(); //если на А0 значение >10, т.е. дверь закрыта noTone(piezo); //Serial.println("All is OK.Fridge closed."); //digitalWrite(led,LOW); alert=0; //флаг тревоги так и остается "не взведен" } }
Примерно через месяц-полтора дуина тупо зависает и не реагирует. Я так понимаю происходит переполнение millis() и условие перестает выполняться. Как поправить код?
P.S. Если кому то данная тема "обрыбила" или "набила оскомину"-пожалуйста не пишите гневных сообщений, пусть даже в таком случае пост без ответов останется...
http://alxarduino.blogspot.ru/2013/09/ComfortablyBlinkWithoutDelay.html
сначала читаем раздел UPD1:, затем прыгаем в начало и внимательно смотрим как это реализовано.
Спасибо, ушел читать.
P.S. Ох и тяжко мне дается программирование, но интересно блииииин :)
Примерно через месяц-полтора дуина тупо зависает и не реагирует. Я так понимаю происходит переполнение millis() и условие перестает выполняться. Как поправить код?
P.S. Если кому то данная тема "обрыбила" или "набила оскомину"-пожалуйста не пишите гневных сообщений, пусть даже в таком случае пост без ответов останется...
ты форум читаешь?
кто тебе запретил прочитать любую тему про титановй велосипед, посмотреть код и понять, как исправить код?
Че за гонево?
Задав тупой вопрос, ты сам, лично, уже себя унизил.
Терпеть унижения и глумеж - это плата за помощь. Не хочешь так платить - звездуй на... отсюда.
если (текущее_время - старое_время > интервал) то {делаем то, что нужно по прошествии интервала}
в этой форме сравнение устойчиво к переполнению и никак не повлияет на программу.
И да, вопрос этот реально задолбал.
И да, Клапауций абсолютно прав - есть ПРИКРЕПЛЕННЫЕ темы, им же и написанные, в том числе и про это.
И да. прежде чем спрашивать нужно потрудиться поискать ответ самому, иначе будешь вечным придурком.
Терпеть унижения и глумеж - это плата за помощь. Не хочешь так платить - звездуй на... отсюда.
я категорически против такого метода оплаты за знания - я сам иногда задаю вопросы на форуме, но после того, как оказался в информационном тупике: не знаешь, по каким словам составить запрос в поисковой системе, другие уважительные причины.
но! все, кто желает получить то, что лежит у них под ногами, должны быть посланы в лес.
Просто вот так вот сходу не вкурил что есть такая тема в прилепленных, можно было дать ссылку молча и удалить тему через пол часа,и никому глаза не мозолило бы!
можно было дать ссылку молча и удалить тему через пол часа,и никому глаза не мозолило бы!
точно так нужно было сделать?
назови хоть одну причину - почему?
А в чем смысл разводить "вот это вот всё",вместо одного поста со ссылкой на соотв. тему?
А в чем смысл разводить "вот это вот всё",вместо одного поста со ссылкой на соотв. тему?
хороший вопрос - зачем ты это "развёл", вместо забить в поиск форума [титановый велосипед], прочитать и поблагодарить за просветление?
Спасибо за просветление
Спасибо за просветление
ок. удачи в нелёгком пути к знаниям.