Принудительное обнуление millis самой программой

Daniil Sidorov
Offline
Зарегистрирован: 27.03.2020

Здравствуйте, возникла острая необходимость обнулить millis по просшествии какого-то времени, которое эта же функция считает. Прост омне нужно чтобы в течении допустим 5 секунд горел светодиод и ультразвуковой датчик проверял расстояние и распределяя его на правильное и не правильное и вот по просшествии 5 секунд принимал решение: если не правильных сигналов больше, то продлить время работы светодиода, а если нет, то переключится на другой светодиод и делать то же самое. Сейчас у меня все на цикле while и много функции delay, но я решил подключить кнопку, чтоб переключать режимы, а из-за delay программа может просто не увидеть нажатие кнопки

bwn
Offline
Зарегистрирован: 25.08.2014

Даниил, переместил в "Песочницу", почитайте в приколоченной теме правила форума.
Миллис, вам обнулять не требуется, когда время по часам засекаете, ведь на ноль не выставляете?
Посмотрите примеры "Блинк без делей", почитайте про "Великое переполнение миллис" и другие этюды от ЕвгенияП. Сразу легче станет.))))

P/S И это, темы не плодите. Четыре сразу, это перебор.

b707
Offline
Зарегистрирован: 26.05.2017

И зачем для этого обнулять миллис?
Пример - если тебе нужно отмерить десять минут от данного момента - ты же не переводишь часы на полночь, ты просто прибавляешь 10 минут к текущему времени

Daniil Sidorov
Offline
Зарегистрирован: 27.03.2020

Да я случайно 4 сделал, инет заглючил

bwn
Offline
Зарегистрирован: 25.08.2014

Daniil Sidorov пишет:
Да я случайно 4 сделал, инет заглючил

У форума движок медленный, не торопитесь повторно жать на "Сохранить".

Daniil Sidorov
Offline
Зарегистрирован: 27.03.2020

Я шерстил информацию, везде говорят через разность millis и переменной и везде цикл if:
If (millis()-g>5000)
g=millis();
И что-то что нужно сделать раз в 5 секунд

А мне нужно в течение 5 секунд делать одно, потом подумать, переключится и в течение 5 секунд делать то же самое, но с другими датчиками

bwn
Offline
Зарегистрирован: 25.08.2014

Добавьте флаги выполняемых операций и исполняйте ветки в зависимости от них.

Daniil Sidorov
Offline
Зарегистрирован: 27.03.2020

Простите, можете приблизительно показать как это должно выглядеть?

renoshnik
Offline
Зарегистрирован: 11.04.2013

Daniil Sidorov пишет:
Я шерстил информацию, везде говорят через разность millis и переменной и везде цикл if: If (millis()-g>5000) g=millis(); И что-то что нужно сделать раз в 5 секунд А мне нужно в течение 5 секунд делать одно, потом подумать, переключится и в течение 5 секунд делать то же самое, но с другими датчиками

Выше вы пишите, что у вас везде "делаи" и все работает...

Как в этом случае вы задаете интервал - "работа в течении 5 секунд"  ????

 

Daniil Sidorov
Offline
Зарегистрирован: 27.03.2020

While (n){
Что-то делать
Delay (1000);
n--
}

Bruzzer
Offline
Зарегистрирован: 17.03.2020

Два человека (bwn и b707) сказали примерно одно и то-же

"когда время по часам засекаете, ведь на ноль не выставляете?"

Я лично, когда засекаю время по наручным часам, именно сбрасываю секундомер в ноль. Еще правильнее запустить обратный отсчет, но на часах быстрее сбросить и запустить секундомер.

Думаю, это распространенная практика использования секундомера.

Что так не надо поступать с миллис понятно, но обоснование не очень.

Ulliss
Offline
Зарегистрирован: 16.09.2019

В вашем примере наручные часы с их механизмом это миллис, а секундомер или таймер обратного отсчета это новая переменная, которая использует тот же механизм. Поэтому миллис обнулять не надо. обнуляйте переменную, которая работает в связке с миллис.

bwn
Offline
Зарегистрирован: 25.08.2014

Bruzzer пишет:

Два человека (bwn и b707) сказали примерно одно и то-же

"когда время по часам засекаете, ведь на ноль не выставляете?"

Я лично, когда засекаю время по наручным часам, именно сбрасываю секундомер в ноль. Еще правильнее запустить обратный отсчет, но на часах быстрее сбросить и запустить секундомер.

Думаю, это распространенная практика использования секундомера.

Что так не надо поступать с миллис понятно, но обоснование не очень.

Не соглашусь, секундомер - прибор для отсчета точных интервалов времени, часы - изделие для показа и отсчета времени. Миллис - аналог часов. Для точных отсчетов интервалов (секундомера) - таймеры и прерывания. ИМХО.