неправильно находите.
Моменты, которые вы пытаетесь вычислить в строчках 30 и 40 - это разные моменты.
В строке 30 вы отмеряете интервал stopor от момента tiktik, а в строке 40 вы отмеряете тот же интервал от рестарта ардуины.
И хотя численно эти моменты практически совпадают, но логически это ошибка.
В строке 40 нужно считать delta от значения tiktik, а не от нуля.
в строке №41? Зачем он там? Вот просто нахрена Вы его туда влепили? Пытаетесь запудрить мозги компилятору и спровоцировать его на ошибку? Не выйдет, на таких простых вещах они (компиляторы) не ошибаются.
Какой нахрен подстраховки? У Вас в левой части стоит переменная какого типа?
Вот эта самая delta – она какого типа у Вас?
Так вот, для подстраховки приводят правую часть к тому же типу, что левая, а не к другому, причём “опасно другому”, т.к. здесь очень велика вероятность получить “undefined behavior” со всеми вытекающими!
У меня вот всё укрепляется ощущение, что Вы всё знаете, просто троллите. Вы совершенно не слушаете, что Вам говорят и игнорируете всё сказанное, как будто с Вами шутки шутят.
Для того, чтобы не убирать задержки, в строке 23 было так:
moment13 = moment13+period13;
Вот представьте. Водителю надо проехать из A в B за заданное время.
Водитель вычислил среднюю скорость, на карте поставил контрольные точки и время их прохождения.
Но на пути встречаются разные препятствия: светофоры, переходы…
В строке 23 так было сделано для компенсации отставания.
Вам человек совершенно правильно сказал, если Вы хотите полагаться на millis, Вы должны полностью избавиться от delay.
Кстати, сравните, что я Вам говорил ещё позавчера:
Вы же, вместо того, чтоб избавляться от задержек пытаетесь всем доказать, что они необходимы и в сотый раз спрашиваете: “Как сделать чёткую работу миллис при секундных задержках в программе?” и не можете понять просто ответа – никак! Избавляйтесь от задержек.
по гамбургскому счёту неверно. Можно, это это будет такой говнокод, через такую глубокую задницу … Могу показать, но при условии, что на этом Вы прекратите доставать нас этой темой. Показать?
Итак. Каждые 10 секунд в строке 30 происходит задержка на 3 секунды. А затем идет нагон упущенного времени.
Точность работы millis() меня вполне устраивает.
У кого есть возможность - посмотрите вывод переменной st2 в мониторе.
Мне нужна именно такая работа.
Я прекратил доставать этой темой. Вопросы не задаю. Только отвечаю на них. Показывайте свой код. Поучусь у авторитетного человека.
О нагоне (догоне). Строка 23 должна выполняться раз в секунду. Но, “благодаря” delay (от которого пока не получается избавиться) в строке 30, у нее (у строки 23) это не получается: ну не дали ей вовремя сработать, не да-ли. Так вот. Чтобы вернуть упущенные несработки (вернее, сработки), строка 18 написана имеенно так. Посмотрите монитор порта, или представьте - что там будет. А будет там то, что мне надо.
Беда только в том, что никто не знает, что же Вам надо. Я вот думал, что Вам надо, чтобы оно равномерно мигало независимо от задержек, поплёвывая на delay. Вот, держите такой пример (я же не знал, что Вам надо по три секунды “немигания”).
Похоже, что нет понимания, как это работает.Задержка внутри периода 10сек, длящаяся 3сек ни на что не влияет. (TIMER0 на это время не останавливается) Ничего нагонять не надо. Следующий цикл миллис будет всё так же через 10 сек