Принудительное обнуление millis самой программой
- Войдите на сайт для отправки комментариев
Пт, 27/03/2020 - 11:13
Здравствуйте, возникла острая необходимость обнулить millis по просшествии какого-то времени, которое эта же функция считает. Прост омне нужно чтобы в течении допустим 5 секунд горел светодиод и ультразвуковой датчик проверял расстояние и распределяя его на правильное и не правильное и вот по просшествии 5 секунд принимал решение: если не правильных сигналов больше, то продлить время работы светодиода, а если нет, то переключится на другой светодиод и делать то же самое. Сейчас у меня все на цикле while и много функции delay, но я решил подключить кнопку, чтоб переключать режимы, а из-за delay программа может просто не увидеть нажатие кнопки
Даниил, переместил в "Песочницу", почитайте в приколоченной теме правила форума.
Миллис, вам обнулять не требуется, когда время по часам засекаете, ведь на ноль не выставляете?
Посмотрите примеры "Блинк без делей", почитайте про "Великое переполнение миллис" и другие этюды от ЕвгенияП. Сразу легче станет.))))
P/S И это, темы не плодите. Четыре сразу, это перебор.
И зачем для этого обнулять миллис?
Пример - если тебе нужно отмерить десять минут от данного момента - ты же не переводишь часы на полночь, ты просто прибавляешь 10 минут к текущему времени
Да я случайно 4 сделал, инет заглючил
У форума движок медленный, не торопитесь повторно жать на "Сохранить".
Я шерстил информацию, везде говорят через разность millis и переменной и везде цикл if:
If (millis()-g>5000)
g=millis();
И что-то что нужно сделать раз в 5 секунд
А мне нужно в течение 5 секунд делать одно, потом подумать, переключится и в течение 5 секунд делать то же самое, но с другими датчиками
Добавьте флаги выполняемых операций и исполняйте ветки в зависимости от них.
Простите, можете приблизительно показать как это должно выглядеть?
Выше вы пишите, что у вас везде "делаи" и все работает...
Как в этом случае вы задаете интервал - "работа в течении 5 секунд" ????
While (n){
Что-то делать
Delay (1000);
n--
}
Два человека (bwn и b707) сказали примерно одно и то-же
"когда время по часам засекаете, ведь на ноль не выставляете?"
Я лично, когда засекаю время по наручным часам, именно сбрасываю секундомер в ноль. Еще правильнее запустить обратный отсчет, но на часах быстрее сбросить и запустить секундомер.
Думаю, это распространенная практика использования секундомера.
Что так не надо поступать с миллис понятно, но обоснование не очень.
В вашем примере наручные часы с их механизмом это миллис, а секундомер или таймер обратного отсчета это новая переменная, которая использует тот же механизм. Поэтому миллис обнулять не надо. обнуляйте переменную, которая работает в связке с миллис.
Два человека (bwn и b707) сказали примерно одно и то-же
"когда время по часам засекаете, ведь на ноль не выставляете?"
Я лично, когда засекаю время по наручным часам, именно сбрасываю секундомер в ноль. Еще правильнее запустить обратный отсчет, но на часах быстрее сбросить и запустить секундомер.
Думаю, это распространенная практика использования секундомера.
Что так не надо поступать с миллис понятно, но обоснование не очень.
Не соглашусь, секундомер - прибор для отсчета точных интервалов времени, часы - изделие для показа и отсчета времени. Миллис - аналог часов. Для точных отсчетов интервалов (секундомера) - таймеры и прерывания. ИМХО.