обнуление таймера через 50 дней, как бороться?
- Войдите на сайт для отправки комментариев
Чт, 23/06/2016 - 15:12
void loop() { timer1 = millis(); if (timer1 - timer2 > 10000) { // каждые 10 сек мигаем светодиодом timer2 = millis(); // тут мигаем светодиодом }
заводим два таймера и мигаем светодиодом каждіе 10сек.
через 50 дней перестанет мигать или будет мигать?
как правильно сделать?
Мигать будет, и не поперхнётся. При условии, что timer1 и timer2 объявлены как unsigned long.
если честно, не могу этого понять, обьявил unsigned long, а как так получится?
http://arduino.ru/forum/programmirovanie/kak-vklyuchit-na-nekotoroe-vremya#comment-20644
если честно, не могу этого понять, обьявил unsigned long, а как так получится?
работает вечно
да, вроде дошло уже, все дело в отсутствии у этого числа "минуса", поэтому числа всегда положительные.
удобно в основной программе вызывать периодически подпрограммы разного назначения, большая точность там не нужна.
да, вроде дошло уже, все дело в отсутствии у этого числа "минуса", поэтому числа всегда положительные.
Значит, не дошло!
Напишите вместо unsigned long просто long и НИЧЕГО не изменится. Минусы появятся, но работать будет также.
Если хотите, чтобы действительно дошло, погуглите "дополнительный код" и разберитесь как реализована арифметика в дополнительном коде.
просто здесь много где делали упор, что мол число не может быть отрицательным... и если посмотреть с этой точки зрения, то да, все будет работать.
но вероятно как вы пишите, причина более глубже, при случае посмотрю.
Для арифметики в дополнительном коде нет никакой разницы положительное число или отрицательное - это уже чисто человеческие заморочки. Биты в компьютере абсолютно одинаково обрабатываются.