Помогите, пожалуйста! ds1820
- Войдите на сайт для отправки комментариев
Вс, 25/10/2015 - 11:12
Здравствуйте! Есть простенький термостат на твердотельном реле и датчике ds1820. Подскажите, как программно сделть так: если в течении часа не произошло изменение температуры то . . . отключаем реле
Запустили нагреватель, зафиксировали температуру и время, мониторим, если температура не изменялась и прошел час времени, отключили нагреватель.
Температура в контролируем интервале изменилась, зафиксировали температуру и время, мониторим. И так по кругу.
В максимальном разрешении датчика будет скорее всего изменяться всегда. Загрубить или вводить гистерезис.
Запустили нагреватель
я предлагал не запускать нагреватель - выпилили гады
Вам скорее надо сделать (если это для обогрева помещения конечно) чтобы обогреватель срабатывал в определённый промежуток температуры например 22 и выше градуса отключен меньше 22 включен.
Я так и хочу сделать, только как программно промотать этот час времени после которого я проведу сравнение?
Вы уж определитесь, что вам надо. Для поддержания температуры время не требуется, узнать, что нагреватель не работает, часа много. Самому себе попробуйте рассказать, что вы хотите, по шагам.
В яме гаража будет находиться эл. тэн подключенный через твердотельное реле, там же внизу - датчик температуры. Реле в свою очередь, как и ds18b20 подключено к ардуино. При температуре 0 градусов или ниже влючается тэн, по достижению +3 градусов - отключается. Если в течении определенного времени ( пусть 30 минут) показатели температуры не изменились, значит: включается индикация и обесточивается реле. Вот как будет. Для меня проблема завести температуру при включении в eeprom, а потом после 30 минут достать, сравнить с первоначальными показаниями температуры - вот в чем программная загвоздка для меня
А на фуя ее в EEPROM заводить? Переменные куда за это время исчезнут?
как проще сделать я не знаю, поделитесь)
завели переменную tempOld, занесли в нее температуру. По истечении интервала сверили с текущей. Eсли нет RTC в 1 часе 3 600 000 millis().
Вроде этого?
tempOld = Temp
int val = tempOld
так правильно:
пардон
не правильно((((
У тебя TempOld всегда равен Temp до и после 23-25
как сделать правильно?
У тебя вообще какой то компот получается. После 25 строки tempOld будет всегда равна Temp.
Инициировать как глобальную переменную, присваивать значение один раз и до истечения интервала (можно поднять флаг) или производить присваивание после каждого изменения вверх и заново запускать счетчик.
После 28 строки следующее за ней условие никогда не выполнится, т.к. переменная всегда будет равна millis().
В 29 строке при сравнении температур, вместо сравнения производишь присваивание. Там же, вместо ==, лучше ставить <=.
А главное, с какой целью производишь такую проверку? Если термостат, то надо контролировать температуру и по ней принимать решения.