Официальный сайт компании Arduino по адресу arduino.cc
Таймер в нутри условия if
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Вс, 12/03/2017 - 13:55
Добрый день, подскажите почему таймер на millis() не работает в нутри условия
пример
long previousMillis = 0;
long interval = 4000;
вот код для void loop(void)
if (temp1 > 27 && EEPROM.read(eprmotor) == 0){ digitalWrite(openpin,LOW); if(millis() - previousMillis > interval ){ previousMillis = millis(); EEPROM.write(eprmotor, 1); digitalWrite(openpin, HIGH); } }
Суть данного когда, когда выполняется условоие, что температура больше 27г и в памяти записано что положение 0 срабатывает фукция которая включает реле и выключает через 4 сек но без задержки работы основной программы то есть без delay.
Но проблема в том что когда условия срабатывает то таймер не работает вернее тоже сразу срабатывает без задержки в 4 сек, как собственно поправить?
А не лучше вынести из первого условия
А не лучше вынести из первого условия
Спасибо, но так тоже не работает.
А не лучше вынести из первого условия
Спасибо, но так тоже не работает.
Че неработает? Реле не влючается или не выключается?
Че неработает? Реле не влючается или не выключается?
Не выключается по задонному времени, а если из первого условия в вашем примере убрать
previousMillis = millis();
то включается и сразу выключается реле
У вас previousMillis объявлена как long а millis() возвращает unsigned long которое при запихивании в long может давать отрицательные значения которые в прорверке условия не вычтутся а сложатся с millis() и условие сразу выполнится.
У вас previousMillis объявлена как long а millis() возвращает unsigned long которое при запихивании в long может давать отрицательные значения которые в прорверке условия не вычтутся а сложатся с millis() и условие сразу выполнится.
Поменял, но не чего не вышло ((
вот весь код
Вставьте в каждый if по сериалу, с отображением критичных значений и проанализируйте, где отрабатывает некорректно.
52 строку попробуйте изменить как temp1 > 26.0 ....
После того как в 59 строке в EEPROM запишется 2 она там останется навечно т.к. в loop нет иного оператора записи и условие в 52 строке больше никогда не выполнится.