Блок управления насосами теплого пола, радиаторов и актуатором 3-х ходового клапана

ой не надо тут наговарить, есть простой психологический прием - промолчать, а вы высказывайтесь, а я послушаю. Это даже интересно


Проверил. I2c датчик sht31 на проводе 4 метра точно работает. Скорость100.000 у m5stack core2. Сейчас в минитеплицу поставлю для испытаний.

1 лайк


Ваще огонь , аж самому нравится. Теперь нужна трава позабористее, увлажнитель, охладитель, нагреватель и осушитель.

1 лайк

красиво… это что такое? Надеюсь не реализация проекта ТС?

Если у тебя это будет, то остальное само появится.

Не факт, могут появиться просто «весёлые картинки». Например с гномиком, или йожигом, или даже ИА.

извиняюсь за вопрос, ТС это кто/что? и как расшифровывается?

насчёт проекта ТС, да, это возможно.
прошивка умеет принимать данные, например температуру, аналоговые и цифровые gpio , и дёргать gpio для реле например, разной длительностью и по таймерам.
а вот прям щас приделываю измеритель напряжения и тока (и плачу :sob::sob::sob: потомучто показывает 5,26 вместо 5 и 12,14 вместо 11,5)

ТС — аббревиатура от английского словосочетания «topic starter» , что означает «топикстартер» .
Так в компьютерном сленге обозначают человека, который инициировал (открыл, создал, начал) тему на форуме либо на любом другом сайте, где общаются пользователи

Тогда бы и писали TS это правильнее всеже от английской фразы абвеатура , а то сижу ломаю голову почему я ТС- транспортное средство. Эх не любит народ свой свой Русский язык. ВсЁ стараются втянуть Англицизм

Специально ради этого раскладку переключать?

В новые правила вписывается - Никаких англицизмов, все написано на русской раскладке.
Ну а то, что от английского словосочетания это всё идёт - то не беда. Или ты как-то по другому слово “Сникерс” пишешь? ))

Ладно дяденьки все лирика но подскажите как по коду, пожалуйста

`void work_Relay (){ // актуатор
if((millis()-closeAct) >= 20000){
if (TempRoom < TroomSet-DIFF && ActuaStop && stoppage){ // момент на полное закрытие байпаса
count ++;
Serial.print(“counter :”);
Serial.println(count);
Serial.println(“актуатор закрывает байпас полностью”);
decoder.write1(opRelay, LOW); //выключаем реле
decoder.write1(clRelay, HIGH);
oled.drawBitmap(94, 0, icon16x16[2], 16, 16);// клапан прикрывается
}
if (TempRoom < TroomSet-DIFF && count == 6 && stoppage){ // после 120 сек байпас закрыт
ActuaStop = 0;
strAct = 0;
count = 0;
Serial.println("актуатор ЗАКРЫТ ПОЛНОСТЬЮ ");
decoder.write1(opRelay, LOW); //выключаем реле
decoder.write1(clRelay, LOW);
oled.drawBitmap(94, 0, icon16x16[0], 16, 16); // клапан закрыт
}
if (TempRoom >= TroomSet-DIFF && stoppage) { // после выполнения этого условия актуатор начинает работать , регулировать непосредственно температуру в комнате
Serial.println(“актуатор передал управление на регулеровку”);
ActuaStop = 1;
strAct = 1;
}
Serial.println(“работает первая часть”);
Serial.print("strAct - ");
Serial.println(strAct);
closeAct = millis();
}
//-----------------------------------------РАБОТА ОСНОВНОЙ ЧАСТИ---------------------
if (millis()-Work_Act >= (SetSec1000)){
if (TempRoom < TroomSet && strAct && stoppage) {
Serial.println(“работает вторая часть”);
if ((millis()- tmr) > (opening ? (SetSec
1000) : 30000)) { //условие реле включается на SetSec1000 сек , а после 60 секунд находится в отключённом положении.
opening = !opening;
Serial.println(“включаем реле на приоткрытие ХХХ сек Вкл 30 сек Вык”);
decoder.write1(opRelay, LOW); //выключаем реле
decoder.write1(clRelay, opening);
oled.drawBitmap(94, 0, icon16x16[2], 16, 16);// клапан приоткрывается
tmr =millis();
// Serial.print("tmr ");
// Serial.println(tmr);
}
}
//--------------------Актуатор остановился при достижении заданной температуры-----------------------
else if (TempRoom >= TroomSet && strAct && stoppage) {
Serial.println(“температура равна установки”);
if (millis()-tmrWait > 4000){
Serial.println(“Актуатор приостановился в каком-то положении”);
decoder.write1(opRelay, LOW); //выключаем реле
decoder.write1(clRelay, LOW);
oled.drawBitmap(94, 0, icon16x16[0], 16, 16); // клапан закрыт
tmrWait=millis();
}
}
else if (TempRoom > TroomSet && strAct && stoppage){
Serial.println(“температура выше установки”);
if ((millis()- timer) > (closing ? (SetSec
1000) : 30000)) { //условие реле включается на SetSec*1000 сек , а после 60 секунд находится в отключённом положении.
closing = !closing;
Serial.println(“включаем реле на закрытие ХХХ сек Вкл 30 сек Вык”);
decoder.write1(opRelay, closing); //выключаем реле
decoder.write1(clRelay, LOW);
oled.drawBitmap(94, 0, icon16x16[1], 16, 16);// клапан прикрывается
timer =millis();
}
}
Work_Act = millis();
}

}
`
Вопрос у меня такой , чувствую что, что-то не так а именно : Когда я запускаю if (millis()-Work_Act >= (SetSec1000)) то если я например ставлю вместо (SetSec1000)) 20000 (20 сек) то реле у меня работает именно эти 20 сек и мосле находится в покое 30 сек. Но когда я устанавливаю уставку на время работы реле (SetSec1000)) как и в if ((millis()- tmr) > (opening ? (SetSec1000) : 30000)) , то все работает как и запланировано
Вот умные дяди подскажите что тут исправить, что б было красиво?

Первая подсказка

Неоформленный код смотреть и обсуждать никто не станет

да и оформленный тоже

2 лайка

Ты сам себя путаешь. Избавься от неточных и непонятных названий переменных.
А всесто ифа со сравнением со сравнением через “?” сделай последовательно несколько иф с разными этапами процесса измерения температуры и открывания-закрывания клапана .

2 лайка

вам спасибо

А вам пожелание сходить на экскурсию в славный город в 30 км от Брюселя. Говорят там хорошие виды и есть на что посмотреть. :rofl:

А код стоило бы таки выложить правильно. Но раз вам на это плевать, то и нам на ваши пожелания … :wink:

void work_Relay (){ // актуатор
if((millis()-closeAct) >= 20000){
if (TempRoom < TroomSet-DIFF && ActuaStop && stoppage){ // момент на полное закрытие байпаса
count ++;
Serial.print(“counter :”);
Serial.println(count);
Serial.println(“актуатор закрывает байпас полностью”);
decoder.write1(opRelay, LOW); //выключаем реле
decoder.write1(clRelay, HIGH);
oled.drawBitmap(94, 0, icon16x16[2], 16, 16);// клапан прикрывается
}
if (TempRoom < TroomSet-DIFF && count == 6 && stoppage){ // после 120 сек байпас закрыт
ActuaStop = 0;
strAct = 0;
count = 0;
Serial.println("актуатор ЗАКРЫТ ПОЛНОСТЬЮ ");
decoder.write1(opRelay, LOW); //выключаем реле
decoder.write1(clRelay, LOW);
oled.drawBitmap(94, 0, icon16x16[0], 16, 16); // клапан закрыт
}
if (TempRoom >= TroomSet-DIFF && stoppage) { // после выполнения этого условия актуатор начинает работать , регулировать непосредственно температуру в комнате
Serial.println(“актуатор передал управление на регулеровку”);
ActuaStop = 1;
strAct = 1;
}
Serial.println(“работает первая часть”);
Serial.print("strAct - ");
Serial.println(strAct);
closeAct = millis();
}
//-----------------------------------------РАБОТА ОСНОВНОЙ ЧАСТИ---------------------
if (millis()-Work_Act >= (SetSec1000)){
if (TempRoom < TroomSet && strAct && stoppage) {
Serial.println(“работает вторая часть”);
if ((millis()- tmr) > (opening ? (SetSec1000) : 30000)) { //условие реле включается на SetSec1000 сек , а после 60 секунд находится в отключённом положении.
opening = !opening;
Serial.println(“включаем реле на приоткрытие ХХХ сек Вкл 30 сек Вык”);
decoder.write1(opRelay, LOW); //выключаем реле
decoder.write1(clRelay, opening);
oled.drawBitmap(94, 0, icon16x16[2], 16, 16);// клапан приоткрывается
tmr =millis();
// Serial.print("tmr ");
// Serial.println(tmr);
}
}
//--------------------Актуатор остановился при достижении заданной температуры-----------------------
else if (TempRoom >= TroomSet && strAct && stoppage) {
Serial.println(“температура равна установки”);
if (millis()-tmrWait > 4000){
Serial.println(“Актуатор приостановился в каком-то положении”);
decoder.write1(opRelay, LOW); //выключаем реле
decoder.write1(clRelay, LOW);
oled.drawBitmap(94, 0, icon16x16[0], 16, 16); // клапан закрыт
tmrWait=millis();
}
}
else if (TempRoom > TroomSet && strAct && stoppage){
Serial.println(“температура выше установки”);
if ((millis()- timer) > (closing ? (SetSec1000) : 30000)) { //условие реле включается на SetSec*1000 сек , а после 60 секунд находится в отключённом положении.
closing = !closing;
Serial.println(“включаем реле на закрытие ХХХ сек Вкл 30 сек Вык”);
decoder.write1(opRelay, closing); //выключаем реле
decoder.write1(clRelay, LOW);
oled.drawBitmap(94, 0, icon16x16[1], 16, 16);// клапан прикрывается
timer =millis();
}
}
Work_Act = millis();
}

}

Ну и хочу поправить себя там 80 км от Брюселя до прекрасного города где много туристов.

Спасибо S23 но хоть мне дорожку подсказал
Вот так код переписал

void work_Relay (){  // актуатор
  if((millis()-closeAct) >= 20000){
   if (TempRoom < TroomSet-DIFF && ActuaStop && stoppage){  // момент начала закрытия байпаса
   count ++;
    Serial.print("counter    :");
    Serial.println(count);
    Serial.println("актуатор закрывает байпас для прогреса батарей");
    decoder.write1(opRelay, LOW);  //выключаем реле
    decoder.write1(clRelay, HIGH);
    oled.drawBitmap(94, 0, icon16x16[2], 16, 16);// клапан прикрывается
   }
   if (TempRoom < TroomSet-DIFF  && count == 6  && stoppage){ // момент полного закрытия байпаса
   ActuaStop = 0;
   strAct = 0;
   count = 0;
    Serial.println("актуатор ЗАКРЫЛ байпас ПОЛНОСТЬЮ ");
    decoder.write1(opRelay, LOW);  //выключаем реле
    decoder.write1(clRelay, LOW);
    oled.drawBitmap(94, 0, icon16x16[0], 16, 16); // клапан закрыт
   }
   if (TempRoom >= TroomSet-DIFF && stoppage) { // после выполнения этого условия начинаеи работать вторая основноная часть
    Serial.println("актуатор передал управление на регулеровку");
   ActuaStop = 1;
   strAct = 1;
   }
    Serial.print("strAct - ");
    Serial.println(strAct);
    closeAct = millis();
  }
    if ((millis()- tmr) >= (opening ? (SetSec*1000) : 60000) && (TempRoom < TroomSet) && strAct && stoppage) { //условие каждые 2 секунд включать реле  на 60 секунд отключать.
      opening = !opening;
      Serial.println("включаем реле на приоткрытие XXXXX сек Вкл 1 мин Вык");
     decoder.write1(opRelay, LOW);  //выключаем реле
     decoder.write1(clRelay, opening);
     oled.drawBitmap(94, 0, icon16x16[2], 16, 16);// клапан приоткрывается
     tmr =millis();
    }
    else if (millis()-tmrWait >= 4000 && (TempRoom >= TroomSet) &&  strAct  && stoppage){
     Serial.println("Актуатор приостановился в каком-то положениии");
     decoder.write1(opRelay, LOW);  //выключаем реле
     decoder.write1(clRelay, LOW);
     oled.drawBitmap(94, 0, icon16x16[0], 16, 16); // клапан закрыт
     tmrWait=millis();
    }
    else if ((millis()- timer) >= (closing ? (SetSec*1000) : 60000) && (TempRoom > TroomSet) &&  strAct  && stoppage) { //условие каждые 2 секунд включать реле  на 60 секунд отключать.
      closing = !closing;
      Serial.println("включаем реле на закрытие XXXX сек Вкл 1 мин Вык");
     decoder.write1(opRelay, closing);  //выключаем реле
     decoder.write1(clRelay, LOW);
     oled.drawBitmap(94, 0, icon16x16[1], 16, 16);// клапан прикрывается
     timer =millis();
   }
}