Функция millis() в Arduino возвращает количество милли-секунд с момента запуска контроллера, так вот, как оказалось, она обнуляется через некоторое время (вроде бы 9-10 часов) и начинает отсчёт заново. "Фишка" известная и описанная, но я не знал и прокололся, когда на основе аптайма делал периодическую отправку температуры на сервер -- у меня через указанное количество часов время отправки значения было больше чем текущий аптайм контроллера и температура переставал отправляться. Не зная об этом сложно отловить, т.к. проблема проявляется только через полсуток. Надеюсь, кому-нибудь, кто прочитает этот пост, сэкономит время
Arduino и millis()
Модератор: immortal
- sergejey
- Site Admin
- Сообщения: 4286
- Зарегистрирован: Пн сен 05, 2011 6:48 pm
- Откуда: Минск, Беларусь
- Контактная информация:
Arduino и millis()
Что называется, хозяйке на заметку.
Функция millis() в Arduino возвращает количество милли-секунд с момента запуска контроллера, так вот, как оказалось, она обнуляется через некоторое время (вроде бы 9-10 часов) и начинает отсчёт заново. "Фишка" известная и описанная, но я не знал и прокололся, когда на основе аптайма делал периодическую отправку температуры на сервер -- у меня через указанное количество часов время отправки значения было больше чем текущий аптайм контроллера и температура переставал отправляться. Не зная об этом сложно отловить, т.к. проблема проявляется только через полсуток. Надеюсь, кому-нибудь, кто прочитает этот пост, сэкономит время
Функция millis() в Arduino возвращает количество милли-секунд с момента запуска контроллера, так вот, как оказалось, она обнуляется через некоторое время (вроде бы 9-10 часов) и начинает отсчёт заново. "Фишка" известная и описанная, но я не знал и прокололся, когда на основе аптайма делал периодическую отправку температуры на сервер -- у меня через указанное количество часов время отправки значения было больше чем текущий аптайм контроллера и температура переставал отправляться. Не зная об этом сложно отловить, т.к. проблема проявляется только через полсуток. Надеюсь, кому-нибудь, кто прочитает этот пост, сэкономит время
Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Re: Arduino и millis()
Тут есть тонкость - тип переменной с которой сравнивать millis(), она должна быть unsigned long.
Ее предельное значение 4,294,967,295 (примерно 50 дней, а точнее 49 дней 17 часов 2 минуты 47 секунд 295 мсек).
http://arduino.ru/Reference/Millis
http://arduino.ru/Reference/UnsignedLong
Ее предельное значение 4,294,967,295 (примерно 50 дней, а точнее 49 дней 17 часов 2 минуты 47 секунд 295 мсек).
http://arduino.ru/Reference/Millis
http://arduino.ru/Reference/UnsignedLong
-
MaksMS82
- Сообщения: 422
- Зарегистрирован: Ср сен 05, 2012 7:30 am
- Откуда: Киров
- Контактная информация:
Re: Arduino и millis()
Интересно , не должно быть порог полсуток ,даже если указать тип long ,то будет предел 25 дней..
- sergejey
- Site Admin
- Сообщения: 4286
- Зарегистрирован: Пн сен 05, 2011 6:48 pm
- Откуда: Минск, Беларусь
- Контактная информация:
Re: Arduino и millis()
У меня была переменная
unsigned int uptime;
uptime=(millis()/1000);
видимо как раз из-за того, что доходило до предела unisgned int была такая проблема (как раз 65500 секунд это около 18 часов)
unsigned int uptime;
uptime=(millis()/1000);
видимо как раз из-за того, что доходило до предела unisgned int была такая проблема (как раз 65500 секунд это около 18 часов)
Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги