простое термореле
- Войдите на сайт для отправки комментариев
Чт, 17/11/2016 - 01:12
требуется создать просто ТР на датчике 18B20(но это не принципиально) интересует как правильнее сделать гистерезис по температуре. то есть включение например при 20гр выключение при 10гр. часть кода взял из статьи(не помню какой) но строчки гистерезиса дописал сам. код на данный момент работает. просто охота услышать мнение спецов о возможном неправильном коде. весь текст не пишу. он стандартный . тольки строчки гистерезиса.
if (T<10)digitalWrite(13, LOW); if (T>20) digitalWrite(13, HIGH );
/* датчик DS18B20 -> 2 (One_wire_bas_pin) реле -> 3 (relay_pin) 1 вкл реле / 0 откл реле (high_temp)= 20 реле откл (low_temp)= 10 реле вкл */ //#1 #include <OneWire.h> const int One_wire_bas_pin = 2 ; // нога на шину OneWire OneWire oneWire(One_wire_bas_pin); #include <DallasTemperature.h> DallasTemperature sensors(&oneWire); // подключаем датчик DS18B20 на шину OneWire float Temperature_value;;//обьявляем переменную температуры (t) const int relay_pin = 3; // нога реле uint8_t relay;//состояние реле const int high_temp = 20; // температура откл const int low_temp = 10; // температура вкл void setup() { //#1 sensors.begin(); sensors.requestTemperatures(); // послать команду измерить температуру pinMode(relay_pin, OUTPUT);// подключить реле digitalWrite(relay_pin, relay = 0); // и выключить } void loop() { //#1 static uint32_t past_1 = 0 ; if (millis() - past_1 >= 1000) { // если прошло 1000 миллисек past_1 = millis() ; Temperature_value = sensors.getTempCByIndex(0);// получить температуру с 1 датчика(0) sensors.requestTemperatures(); // послать команду измерить температуру if (relay && (Temperature_value >= high_temp)) // если реле включено и больше нужного digitalWrite(relay_pin, relay = 0); // то реле выключить if (!relay && (Temperature_value <= low_temp)) // если реле выключено и меньше нужного digitalWrite(relay_pin, relay = 1); // то реле включить } }А что Вам собственно нужно? Чьё-то мнение про эти две строчки?
Не, знаю, зачем Вам это, но, пожулйста ...
Код выглядит неаккуратным. Допустим, в строке 1 проверка дала true. У Вас выполняется digitalWrite, а после этого, зачем-то, выполнается проверка в строке 2. Зачем выполнять проверку. которая заведомо ложна? Не то, что бы это приводило к взрыву Чернобыля, но выглядит неаккуратно.
Добавьте else в начало второй строки.
в программировании пока не силен, поэтому и хочу услышать что скажет народ. можно легко скопировать чужое готовое не задумываясь что там. но вряд ли .то пойдет на пользу. сам вижу что второй if как то не к месту но по другому не придумал. а что даст добавление else кроме красоты?
То, что если первая проверка оказалось истной (т.е. T<10), программа не будет выполнять вторую проверку (нахрена проверять T>20, если Т итак уже меньше 10?)
понял. хотя по моим представлениям так и получается гистерезис
Так, так и получается, но зачем переменную, которая с прошлого сравнения не поменялась с чем-то противоположным сравнивать? ВТорое сравнение сработае тогда, когда первое окажется ложным. А когда первое истина нафига сравнивать?
в голове это понимаю а как в коде выразить пока не знаю. как было бы грамотнее написать? что код был не громоздким?
в голове это понимаю а как в коде выразить пока не знаю. как было бы грамотнее написать? что код был не громоздким?
Читайте последнию строчку в #2 до тех пор, пока не наступит просветление :)
добавление else приведет к проверке обеих if? а без else возможна некорректная работа термореле?
добавление else приведет к проверке обеих if? а без else возможна некорректная работа термореле?
Тогда читайте вот это, опять же до полного просветления