ой не надо тут наговарить, есть простой психологический прием - промолчать, а вы высказывайтесь, а я послушаю. Это даже интересно
Проверил. I2c датчик sht31 на проводе 4 метра точно работает. Скорость100.000 у m5stack core2. Сейчас в минитеплицу поставлю для испытаний.
Ваще огонь , аж самому нравится. Теперь нужна трава позабористее, увлажнитель, охладитель, нагреватель и осушитель.
красиво… это что такое? Надеюсь не реализация проекта ТС?
Если у тебя это будет, то остальное само появится.
Не факт, могут появиться просто «весёлые картинки». Например с гномиком, или йожигом, или даже ИА.
извиняюсь за вопрос, ТС это кто/что? и как расшифровывается?
насчёт проекта ТС, да, это возможно.
прошивка умеет принимать данные, например температуру, аналоговые и цифровые gpio , и дёргать gpio для реле например, разной длительностью и по таймерам.
а вот прям щас приделываю измеритель напряжения и тока (и плачу ![]()
![]()
потомучто показывает 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 ? (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();
}
}
`
Вопрос у меня такой , чувствую что, что-то не так а именно : Когда я запускаю if (millis()-Work_Act >= (SetSec1000)) то если я например ставлю вместо (SetSec1000)) 20000 (20 сек) то реле у меня работает именно эти 20 сек и мосле находится в покое 30 сек. Но когда я устанавливаю уставку на время работы реле (SetSec1000)) как и в if ((millis()- tmr) > (opening ? (SetSec1000) : 30000)) , то все работает как и запланировано
Вот умные дяди подскажите что тут исправить, что б было красиво?
да и оформленный тоже
Ты сам себя путаешь. Избавься от неточных и непонятных названий переменных.
А всесто ифа со сравнением со сравнением через “?” сделай последовательно несколько иф с разными этапами процесса измерения температуры и открывания-закрывания клапана .
вам спасибо
А вам пожелание сходить на экскурсию в славный город в 30 км от Брюселя. Говорят там хорошие виды и есть на что посмотреть. ![]()
А код стоило бы таки выложить правильно. Но раз вам на это плевать, то и нам на ваши пожелания … ![]()
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();
}
}


