Страница 1 из 1

Arduino и millis()

Добавлено: Чт мар 27, 2014 3:35 pm
sergejey
Что называется, хозяйке на заметку.

Функция millis() в Arduino возвращает количество милли-секунд с момента запуска контроллера, так вот, как оказалось, она обнуляется через некоторое время (вроде бы 9-10 часов) и начинает отсчёт заново. "Фишка" известная и описанная, но я не знал и прокололся, когда на основе аптайма делал периодическую отправку температуры на сервер -- у меня через указанное количество часов время отправки значения было больше чем текущий аптайм контроллера и температура переставал отправляться. Не зная об этом сложно отловить, т.к. проблема проявляется только через полсуток. Надеюсь, кому-нибудь, кто прочитает этот пост, сэкономит время :)

Re: Arduino и millis()

Добавлено: Пт мар 28, 2014 5:41 am
dmw
Тут есть тонкость - тип переменной с которой сравнивать millis(), она должна быть unsigned long.
Ее предельное значение 4,294,967,295 (примерно 50 дней, а точнее 49 дней 17 часов 2 минуты 47 секунд 295 мсек).
http://arduino.ru/Reference/Millis
http://arduino.ru/Reference/UnsignedLong

Re: Arduino и millis()

Добавлено: Пт мар 28, 2014 11:24 am
MaksMS82
Интересно , не должно быть порог полсуток ,даже если указать тип long ,то будет предел 25 дней..

Re: Arduino и millis()

Добавлено: Пт мар 28, 2014 11:40 am
sergejey
У меня была переменная
unsigned int uptime;
uptime=(millis()/1000);
видимо как раз из-за того, что доходило до предела unisgned int была такая проблема (как раз 65500 секунд это около 18 часов)