Циклический счетчик времени.
- Войдите на сайт для отправки комментариев
Чт, 09/06/2016 - 15:40
Добрый день, только начал изучать Arudino. есть задача выполнять действия, а именно:
1) подать сигнал на выход 1
2) пауза 20 мин
3)выключить сигнал на выходе 1
4) включить сигнал на порт 2
И т.д. всего 3 исполнительных устройства.
потом надо обеспечить паузу в 23 часа.
Возник вопрос: кие операторы использовать для работы со временем?
P.S.Есть идея после включения и выключения портов обнулять счетчик времени чтобы не переполнять память и делать паузу 23 часа.
Да, но смущает описание оператора:
Возвращает количество миллисекунд с момента начала выполнения текущей программы на плате Arduino. Это количество сбрасывается на ноль, в следствие переполнения значения, приблизительно через 50 дней.
Дык вам же каждые 23 часа надо. Чего мешает сбрасывать переменную, хранящую значение вызова millis, в 0? И потом - почитайте про переполнение беззнаковых чисел, и про беззнаковую арифметику вообще. И сразу поймёте, что страшилки - нет, если правильно писать код:
if (millis() - previousMillis > interval) { do the job; }И пофиг на переполнение.
Спасибо.
Raftor, перечитайте свой вопрос. Вы не находите его странным?
Хорошо, давайте объясню понятнее. Код, который я привел (чуть ниже) работает и абсолютно правильно делает то, что Вы просили! Вам это надо? А если нет, по подумайте как нормально сформулировать вопрос.
void setup() { pinMode(1, OUTPUT); pinMode(2, OUTPUT); pinMode(3, OUTPUT); } void loop() { //1) подать сигнал на выход 1 digitalWrite(1, HIGH); //2) пауза 20 мин delay(60000UL * 20); //3)выключить сигнал на выходе 1 digitalWrite(1, LOW); //4) включить сигнал на порт 2 digitalWrite(2, HIGH); //5) пауза 20 мин delay(60000UL * 20); //6)выключить сигнал на выходе 2 digitalWrite(1, LOW); //7) включить сигнал на порт 3 digitalWrite(3, HIGH); //8) пауза 20 мин delay(60000UL * 20); //9)выключить сигнал на выходе 3 digitalWrite(1, LOW); //потом надо обеспечить паузу в 23 часа. delay(60000UL * 60 * 23); }Большое спасибо, за такой подробный ответ.
Действительно вопрос получился очень сумбурный, т.к. я первый раз столкнулся с написанием кода для Arudino. Вае решение с таким форматом времени меня устроит, т.к. не каких других действий контроллер делать не должен.
Ну, если устроит, то значит вопрос был задан правильно :) Удачи!