millis
- Войдите на сайт для отправки комментариев
Втр, 24/03/2020 - 20:15
Подскажите пожалуйста. Хочу сделать, что-то вроде светодиодного предупреждения. Когда температура поднимается выше нормы, то светодиод горит, когда поднимается до критической отметки начинает мигать. Хотел использовать millis, но я не понимаю как это сделать. Если с просто горением светодиода все ясно, то как сделать, что бы он мигал и не тормозил скетч? Мигать должен до снижения температуры.
if ( t >= 30 && t < 40) { digitalWrite(ledPin, HIGIH); } else if (t > 40) { .........
Как продолжить дальше, если температура превысила 40? что бы диод мигал. Буду рад помощи.
См. статью "Blink без delay".
... и использовать несколько раз в одной реализации!
Когда переполнится unsigned long last_time, не зависнет ли ардуино? Или она сама скинет значение millis?
Когда переполнится unsigned long last_time, не зависнет ли ардуино? Или она сама скинет значение millis?
1. Не зависнет;
2. При переполнении значение переменной last_time заворачивается на начало.
Спасибо. А как то можно этот код улучшить или оптимизировать?
Спасибо. А как то можно этот код улучшить или оптимизировать?
Можно. Например, внутри функции siglan читать в переменную с датчика один раз, а не дважды. Затем: смысла читать из датчика при каждом проходе loop - нет никакого, достаточно читать раз в N времени.
Вы что хотите сделать? Читать из датчика и если значение превышает N влажности, то мигать светодиодом? Вот, как вариант:
С датчика читается раз в 2 секунды, смена состояния светодиода - каждые полсекунды, если сработала уставка.
Или покороче (для человека):
Или покороче (для человека):
У меня просто махонький заход: писать в порты только тогда, когда что-то поменялось. Пунктик, короче :)
Или покороче (для человека):
У меня просто махонький заход: писать в порты только тогда, когда что-то поменялось. Пунктик, короче :)
Встречал я такой пунктик, но добрый человек объяснил, что надо всегда смотреть, что быстрее проверять и в случае изменения писать или в каждом цикле писать то как изменится, так изменится. Если с проверкой никаких других накладных расходов - действий нет, писать на каждом обороте выходит дешевле и по времени и по использованию памяти. Когда в тиньке борешься за каждый байт не до пунктиков.
Встречал я такой пунктик, но добрый человек объяснил, что надо всегда смотреть, что быстрее проверять и в случае изменения писать или в каждом цикле писать то как изменится, так изменится. Если с проверкой никаких других накладных расходов - действий нет, писать на каждом обороте выходит дешевле и по времени и по использованию памяти. Когда в тиньке борешься за каждый байт не до пунктиков.
digitalWrite всяко медленнее, чем одна проверка if. Ессно, я понимаю целесообразность, и руководствуюсь ровно тем, что вы описали ;)