Страница 5 из 7

Re: esp8266 + AMS + MajorDoMo - ПЕРВЫЕ ШАГИ

Добавлено: Сб июл 14, 2018 12:07 am
eGorka
serghei писал(а):
Пт июл 13, 2018 10:05 pm
Таки да и уже есть , но не работает :lol: . ser009 предоставил код , работает со страницы. Выбор срабатывания реле по времени , вручную по нажатию на экран. А вот по условию влажности не хочет. Выставляю верхнею и нижнею границы. Запоминаю. При превышению значения реле начинает бешено переключаться.
СпойлерПоказать

Код: Выделить всё

/*
  Modul Algoritm
  part of Arduino Mega Server project
*/

/* значение по которому ведется регулирование
 * в примере это значени будет задаваться вручную с web
 */
//int value1 = 5 сек;

// mode режим
  // 0 - ручной
  // 1 - по значению датчика
  // 2 - по времени
  // 3 - not defined and not contXstatus
byte rele1mode = 0;

/* значения максимальных и минимальых значений для включения  
 * и выключения RELE1 
 */
int value_on = 0;
int value_off = 100;
int value_web = 0;

/* время включения по умолчанию /часы, минуты/
 * при необходимости можно добавить секунды 
 */
int r1hour_on = 19; int r1minute_on = 00;
int r1hour_off = 19; int r1minute_off = 15;

void Regul(){

if (rele1state == 0&&rele1mode == 0&&value_web == 1){ 
      rele1state = 1;
      MessText = "Выход D32. Включение с Веб";
           MessLoger(String (MessText), String (Info));
           #ifdef SERIAL_PRINT
           Serial.println("Out D32. command ON to Web");
           #endif
           } else{};

if (rele1state == 1&&rele1mode == 0&&value_web == 0){ 
        rele1state = 0;
        MessText = "Выход D32. Отключение с Веб";
           MessLoger(String (MessText), String (Info));
           #ifdef SERIAL_PRINT
           Serial.println("Out D32. command ON to Web");
           #endif
           } else{};
  
if (rele1state == 0&&rele1mode == 2&&r1hour_on == int (hour())&&r1minute_on == int (minute())){
  rele1state = 1;
  MessText = "Выход D32. Включение по времени";
           MessLoger(String (MessText), String (Info));
           #ifdef SERIAL_PRINT
           Serial.println("Out D32. command ON to time");
           #endif
           } else{};

if (rele1state == 1&&rele1mode == 2&&r1hour_off == int (hour())&&r1minute_off == int (minute())){
  rele1state = 0;
  
  MessText = "Выход D32. Отключение по времени";
           MessLoger(String (MessText), String (Info));
           #ifdef SERIAL_PRINT
           Serial.println("Out D32. command OFF to time");
           #endif
           }  else {};
/*
  if (rele1state == 0&&rele1mode == 1&&value_on >= dht11_h){
  rele1state = 1;
  MessText = "Выход D32. Включение по датчику влажности";
           MessLoger(String (MessText), String (Info));
           #ifdef SERIAL_PRINT
           Serial.println("Out D32. command ON to HUM ");
           #endif
  }else {};

  if (rele1state == 1&&rele1mode == 1&&value_off < dht11_h){
  rele1state = 0;
  MessText = "Выход D32. Отключение по датчику влажности";
           MessLoger(String (MessText), String (Info));
           #ifdef SERIAL_PRINT
           Serial.println("Out D32. command OFF to HUM ");
           #endif
} else {};
*/
//--------------------------------------------
/*
if (rele1state == 0&&rele1mode == 1&&value_on >= dht11_h){

//  if (rele1mode == 1&&value_on >= dht11_h){
  rele1state = 1;


    MessText = "Выход D32. Включение по датчику влажности";
           MessLoger(String (MessText), String (Info));
           #ifdef SERIAL_PRINT
           Serial.println("Out D32. command ON to HUM ");
           #endif
   
} // if      
else if (rele1state == 1&&rele1mode == 1&&value_off <= dht11_h){

//  else if (rele1mode == 1&&value_off <= dht11_h){
  rele1state = 0;
 

     MessText = "Выход D32. Отключение по датчику влажности";
           MessLoger(String (MessText), String (Info));
           #ifdef SERIAL_PRINT
           Serial.println("Out D32. command OFF to HUM ");
           #endif
} // else if
  */         
} // void regul

Код: Выделить всё

if (rele1state == 0 && rele1mode == 1 && value_on >= dht11_h){
  rele1state = 1;  
}      
else if (rele1state == 1 && rele1mode == 1 && value_off <= dht11_h){
  rele1state = 0;
} 
изощрённо-извращённый способ :D
dht11_h >= value_on
dht11_h <= value_off
А что будет если value_on == value_off и value_on < value_off ?

Re: esp8266 + AMS + MajorDoMo - ПЕРВЫЕ ШАГИ

Добавлено: Сб июл 14, 2018 7:49 am
Alex

Код: Выделить всё

if (rele1state == 0&&rele1mode == 1&&value_on >= dht11_h){
  rele1state = 1;  
}      
else if (rele1state == 1&&rele1mode == 1&&value_off <= dht11_h){
  rele1state = 0;
} 
Что это за конструкция? Это бред сумасшедшего или так можно? И в чём смысл такой записи условий?

Re: esp8266 + AMS + MajorDoMo - ПЕРВЫЕ ШАГИ

Добавлено: Сб июл 14, 2018 8:54 am
eGorka
Alex писал(а):
Сб июл 14, 2018 7:49 am

Код: Выделить всё

if (rele1state == 0 && rele1mode == 1 && value_on >= dht11_h){
  rele1state = 1;  
}      
else if (rele1state == 1 && rele1mode == 1 && value_off <= dht11_h){
  rele1state = 0;
} 
Что это за конструкция? Это бред сумасшедшего или так можно? И в чём смысл такой записи условий?
Классическая конструкция.
Так можно.
Компактность кода.
Встречный вопрос: - а какой смысл, в данном случае, проверять каждое условие по отдельности?

Код: Выделить всё

if(rele1state == 0){
  if(rele1mode == 1){
    if(value_on >= dht11_h){
      rele1state = 1;
    }
  }
}
else if(rele1state == 1){
  if(rele1mode == 1){
    if(value_off <= dht11_h){
      rele1state = 0;
    }
  }
}

Re: esp8266 + AMS + MajorDoMo - ПЕРВЫЕ ШАГИ

Добавлено: Сб июл 14, 2018 9:20 am
alexsis_76
Да ты знаешь толк в извращениях.
Ты сначала включаешь реле а затем выключаешь.

Re: esp8266 + AMS + MajorDoMo - ПЕРВЫЕ ШАГИ

Добавлено: Сб июл 14, 2018 9:26 am
eGorka
alexsis_76 писал(а):
Сб июл 14, 2018 9:20 am
Ты сначала включаешь реле а затем выключаешь.
Это где? Как бы value_on и value_off не одно и тоже.

Re: esp8266 + AMS + MajorDoMo - ПЕРВЫЕ ШАГИ

Добавлено: Сб июл 14, 2018 9:50 am
alexsis_76
if (rele1state == 0 && rele1mode == 1 && value_on >= dht11_h){
rele1state = 1;
}
else if (rele1state == 1 && rele1mode == 1 && value_off <= dht11_h){
rele1state = 0;
}

когда выполняется первое условие ]if (rele1state == 0 && rele1mode == 1 && value_on >= dht11_),rele1state становится равным 1,в следующем проходе выполняется код в ветке else if (rele1state == 1 && rele1mode == 1 && value_off <= dht11_h) т к rele1state = 1 и value_off наверняка меньше или равно dht11_h то и это условие выполняется,ну и далее по кругу.

Re: esp8266 + AMS + MajorDoMo - ПЕРВЫЕ ШАГИ

Добавлено: Сб июл 14, 2018 10:22 am
eGorka
alexsis_76 писал(а):
Сб июл 14, 2018 9:50 am
if (rele1state == 0 && rele1mode == 1 && value_on >= dht11_h){
rele1state = 1;
}
else if (rele1state == 1 && rele1mode == 1 && value_off <= dht11_h){
rele1state = 0;
}

когда выполняется первое условие ]if (rele1state == 0 && rele1mode == 1 && value_on >= dht11_),rele1state становится равным 1,в следующем проходе выполняется код в ветке else if (rele1state == 1 && rele1mode == 1 && value_off <= dht11_h) т к rele1state = 1 и value_off наверняка меньше или равно dht11_h то и это условие выполняется,ну и далее по кругу.
eGorka писал(а):dht11_h >= value_on
dht11_h <= value_off
Ну тогда я совсем дурак.

Re: esp8266 + AMS + MajorDoMo - ПЕРВЫЕ ШАГИ

Добавлено: Сб июл 14, 2018 10:52 am
alexsis_76
Именно так как написано у Сергея
Показание датчика 25 , value_ on 30, value_off 20 вот и переключается постоянно.

Re: esp8266 + AMS + MajorDoMo - ПЕРВЫЕ ШАГИ

Добавлено: Сб июл 14, 2018 10:56 am
Alex
Так можно.
Прошу прощения, невнимательно посмотрел, меня ввело в заблуждение отсутствие пробелов рядом со знаками && и вместо

Код: Выделить всё

(rele1state == 1&&rele1mode == 1&&value_off <= dht11_h)
я увидел что-то вроде

Код: Выделить всё

(rele1state == rele1mode == value_off <= dht11_h)
и у меня порвался шаблон :)

Re: esp8266 + AMS + MajorDoMo - ПЕРВЫЕ ШАГИ

Добавлено: Сб июл 14, 2018 11:12 am
alexsis_76
вообще то вместо if (rele1state == 1) можно написать if (rele1state) и будет правильно.