Объясните как работать с millis();
- Войдите на сайт для отправки комментариев
Втр, 28/09/2021 - 00:36
на этом простом примере хочу чтоб через 10 секунд включилась светодтод. потом через 30 секунд второй светодиод.
как сделать так чтоб через 1 минуту выключились оба светодтода и не включались больше до следущей перезагрузки.
unsigned long ZADERGKA; unsigned long ZADERGKA2; void setup(){ pinMode(13,OUTPUT); pinMode(6,OUTPUT); } void loop(){ if(millis()-ZADERGKA>10000){ ZADERGKA=millis(); digitalWrite(13,HIGH); } if(millis()-ZADERGKA2>30000){ ZADERGKA2=millis(); digitalWrite(6,HIGH); } }
Добавьте третье условие с отключением и флаги что бы пропускать уже произошедшие события.
точка начала отсчёта всего одна, так что переменная нужна только под неё, далее нужен флаг, как только оттикает время на выключение, взводим флаг и выключаем светодиоды, естественно в условия на включение добавить && !flag
строки 12 и 17 удалить за бессмысленностью
А можно и без переменных, а флаг только защита от переполнения
millis().
А можно и без переменных, а флаг только защита от переполнения
millis().
можно
А можно решить эту задачу вообще без использования переменных (флаг - это тоже переменная).
А вообще скажу так: тема millis() не раскрыта )))
Вопросы к ТС.
1) Почему написали
if
(millis()-ZADERGKA>10000)
а не как обычно в примерах
if
(millis()-ZADERGKA>=10000) ?
2)
if
(millis()-ZADERGKA>10000){
ZADERGKA=millis()
;Всегда ли будет millis() во второй строке равняться millis() в первой строке? (возвращаемые значения)
А можно решить эту задачу вообще без использования переменных (флаг - это тоже переменная).
в третьем условном операторе?
Всегда ли будет millis() во второй строке равняться millis() в первой строке? (возвращаемые значения)
Ой, не будите
спящую собакустарый срач!В данном конкретном случае - будет. Но, если ТС понапишет еще чонить между if-ами, то будет зависеть от "чонить"
Однако, никто ведь не обращает внимание на оформление. А зря. Лично я предпочитаю всё оформить inline функцией или макро. Ведь один раз подумал и забыл напрочь! И всё красиво, без каких то комментариев. Типа, every(1000) toggle(LED); или once(1000) on(LED); как в данном случае. Нет, вы всю дорогу громоздите монструозные конструкции! Ужос!
Однако, никто ведь не обращает внимание на оформление. А зря. Лично я предпочитаю всё оформить inline функцией или макро. Ведь один раз подумал и забыл напрочь! И всё красиво, без каких то комментариев. Типа, every(1000) toggle(LED); или once(1000) on(LED); как в данном случае. Нет, вы всю дорогу громоздите монструозные конструкции! Ужос!
Федор, плз без обид, но тут вопрос вкусов. Я каждый раз, когда ты приводишь код со своими макросами монструозными, внутренне содрогаюсь. ;)) Особенно every(). Ведь не так сложно написать нормальный класс, куда "пихать" нагрузочный код при помощи "блямбы"? А ты юзаешь этот кошмарный макрос! ;))
Да. Но не всем ведь даны плюсы. Представь себе что х51 и PIC-и их не имеют. А вот макросы подходят для всех. Да и не настолько это сложно, что бы не просечь один раз и забыть.)
Представь себе что х51 и PIC-и их не имеют.
Да я прекрасно понимаю "откуда ноги растут". От старых привычек. Тут мера нужна, а то так и до кода на асме дойти можно и возврата уже не будет! ;)))))))
Тут ведь фишка в самом документированном коде. Когда ты видишь, что открытым текстом написано "каждые 1000 мс", ну о чём ещё можно говорить! Или "один раз в 1000 мс" какие могут быть разговоры! Просто как божий день! И не нужно чесать репу, разгадывая "а что же делает этот код"... Разве нет?
Да я прекрасно понимаю "откуда ноги растут". От старых привычек. Тут мера нужна, а то так и до кода на асме дойти можно и возврата уже не будет! ;)))))))
Да, на 100%. Везде приходится идти на компромис. И так во всём.)
Мне ж и самому 52 годика 19 ноября стукнет (если доживу) и, как следствие, плюсы даются усилием.
На уровне рефлексов башка выдает процедурный код, который можно в продакшн сразу ;)). А вот под "классы" его приходится перепридумавать.
Я тебя "опередю.") У меня 2 ноября. Токо дожить нужно.
Я тебя "опередю.") У меня 2 ноября. Токо дожить нужно.
куму 10 ноября было бы 60, если бы не привился (((
куму 10 ноября было бы 60, если бы не привился (((
Это как ?
Типа, every(1000)
Не знаю, что за every у Вас, но у Великого была кривая. Он хреновенько
один раз подумал
А потому там нельзя было
и забыл напрочь!
Да. Но не всем ведь даны плюсы.
«Настоящий программист может написать фортрановскую программу на любом языке»
Эд Пост (Ed Post) «Настоящие программисты не используют Паскаль»
Всегда ли будет millis() во второй строке равняться millis() в первой строке? (возвращаемые значения)
Ой, не будите
спящую собакустарый срач!Евгений, а срач уже был на эту тему? Или я не видел, или позабыл..
Куда ТС пропал?
Я вот уже съездил к любимой теще, врезал замок в дверь, заменил обивку на двери, а его и след простыл)))
куму 10 ноября было бы 60, если бы не привился (((
Это как ?
инсульт
Куда ТС пропал?
Я вот уже съездил к любимой теще, врезал замок в дверь, заменил обивку на двери, а его и след простыл)))
вот это у тебя производительность )))
В данном конкретном случае - будет. Но, если ТС понапишет еще чонить между if-ами, то будет зависеть от "чонить"
Деда, а как тебе такой пример
Печатает 41 и 43. Хто 2 мс съел?
Про "нелюбимые" миллис числа http://arduino.ru/forum/otvlechennye-temy/bespoleznaya-arifmeticheskaya-krasivost
Куда ТС пропал?
Я вот уже съездил к любимой теще, врезал замок в дверь, заменил обивку на двери, а его и след простыл)))
вот это у тебя производительность )))
и скетч про дырявую миллис сочинил)) не с первого раза получилось поймать момент.
сюда как раз попадает коррекция, бо в секунде не 1024 мс, как таймер 0 щитает, а 1000, как кожаные мешки привыкли.
Upd. Тему по ссылке не читал, но осуждаю. :)
Да, на заре попадал и я в эту ловушку.)
«Настоящий программист может написать фортрановскую программу на любом языке»
Эд Пост (Ed Post) «Настоящие программисты не используют Паскаль»
Да, и "цвет автомобиля может быть любым, при условии...")
получилась. работает.
получилась. работает.
Мазл тов!
получилась. работает.
Так нагляднее
А так:
это зачем? не понял. условие while(1) и пустые фигурные скопкы.
это зачем? не понял. условие while(1) и пустые фигурные скопкы.
Зацикливание (бесконечный цикл) до перезагрузки.
это зачем? не понял. условие while(1) и пустые фигурные скопкы.
потому что try Сишники так непишут, правильно так
while(true); // если аборты в твоей стране запрещены
или
abort(); // если нет
это зачем? не понял. условие while(1) и пустые фигурные скопкы.
Это означает -дальше кина не будет.
потому что try Сишники так непишут, правильно так
while(true);
false == 0, а true != 0.
false == 0, а true != 0.
приучай себя писать устойчивый код. Если завтра стандарт поменяется так, что true будет равно 1, а false всему остальному, то мой код работать будет так же, а твой нет.
приучай себя писать устойчивый код. Если завтра стандарт поменяется так, что true будет равно 1, а false всему остальному, то мой код работать будет так же, а твой нет.
Но даже в этом случае моё
сработает.
Upd. Тему по ссылке не читал, но осуждаю. :)
:-((( а я старалси :-(
Upd. Тему по ссылке не читал, но осуждаю. :)
:-((( а я старалси :-(
А мне было интересно прочесть. Но на практике же никакого применения нет?
Печатает 41 и 43. Хто 2 мс съел?
AVR, кто ж еще!.
На ARM такая бяка не наблюдается.
false == 0, а true != 0.
приучай себя писать устойчивый код. Если завтра стандарт поменяется так, что true будет равно 1, а false всему остальному, то мой код работать будет так же, а твой нет.
Стандарт поменяется не раньше, чем слово "Windows" не будет вызывать иных ассоциаций кроме застекленного проема в стене.
А так:
по идее функции millis() можно написать в блоке setup , тогда они будут выполняться один раз при запуске программы и дальше начнется бесконечный пустой loop(), не знаю насколько это грамотно, но у меня подобное работало
по идее функции millis() можно написать в блоке setup , тогда они будут выполняться один раз при запуске программы
интересно интересно, можете попробовать передвинуть этот код в setup ?
по идее функции millis() можно написать в блоке setup , тогда они будут выполняться один раз при запуске программы
интересно интересно, можете попробовать передвинуть этот код в setup ?
ты жеж и так знаешь что ежели в цикл обернуть пока фалсе то будет
ты жеж и так знаешь что ежели в цикл обернуть пока фалсе то будет
я то знаю, а вот Банзай знает ли? судя по его совету - нет