Модератор: Alex
-
eGorka
- Сообщения: 182
- Зарегистрирован: Чт ноя 24, 2016 10:47 am
-
Благодарил (а):
5 раз
-
Поблагодарили:
25 раз
Сообщение
eGorka » Сб июл 14, 2018 12:07 am
serghei писал(а): ↑Пт июл 13, 2018 10:05 pm
Таки да и уже есть , но не работает
.
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;
}
изощрённо-извращённый способ
dht11_h >= value_on
dht11_h <= value_off
А что будет если value_on == value_off и value_on < value_off ?
Последний раз редактировалось
eGorka Сб июл 14, 2018 8:05 am, всего редактировалось 1 раз.
-
Alex
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
-
Благодарил (а):
42 раза
-
Поблагодарили:
262 раза
Сообщение
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;
}
Что это за конструкция? Это бред сумасшедшего или так можно? И в чём смысл такой записи условий?
-
eGorka
- Сообщения: 182
- Зарегистрирован: Чт ноя 24, 2016 10:47 am
-
Благодарил (а):
5 раз
-
Поблагодарили:
25 раз
Сообщение
eGorka » Сб июл 14, 2018 8:54 am
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;
}
}
}
-
alexsis_76
- Сообщения: 791
- Зарегистрирован: Пт янв 22, 2016 10:08 am
-
Благодарил (а):
6 раз
-
Поблагодарили:
63 раза
Сообщение
alexsis_76 » Сб июл 14, 2018 9:20 am
Да ты знаешь толк в извращениях.
Ты сначала включаешь реле а затем выключаешь.
-
eGorka
- Сообщения: 182
- Зарегистрирован: Чт ноя 24, 2016 10:47 am
-
Благодарил (а):
5 раз
-
Поблагодарили:
25 раз
Сообщение
eGorka » Сб июл 14, 2018 9:26 am
alexsis_76 писал(а): ↑Сб июл 14, 2018 9:20 am
Ты сначала включаешь реле а затем выключаешь.
Это где? Как бы
value_on и
value_off не одно и тоже.
-
alexsis_76
- Сообщения: 791
- Зарегистрирован: Пт янв 22, 2016 10:08 am
-
Благодарил (а):
6 раз
-
Поблагодарили:
63 раза
Сообщение
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
- Сообщения: 182
- Зарегистрирован: Чт ноя 24, 2016 10:47 am
-
Благодарил (а):
5 раз
-
Поблагодарили:
25 раз
Сообщение
eGorka » Сб июл 14, 2018 10:22 am
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
Ну тогда я совсем дурак.
-
alexsis_76
- Сообщения: 791
- Зарегистрирован: Пт янв 22, 2016 10:08 am
-
Благодарил (а):
6 раз
-
Поблагодарили:
63 раза
Сообщение
alexsis_76 » Сб июл 14, 2018 10:52 am
Именно так как написано у Сергея
Показание датчика 25 , value_ on 30, value_off 20 вот и переключается постоянно.
-
Alex
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
-
Благодарил (а):
42 раза
-
Поблагодарили:
262 раза
Сообщение
Alex » Сб июл 14, 2018 10:56 am
Так можно.
Прошу прощения, невнимательно посмотрел, меня ввело в заблуждение отсутствие пробелов рядом со знаками && и вместо
Код: Выделить всё
(rele1state == 1&&rele1mode == 1&&value_off <= dht11_h)
я увидел что-то вроде
Код: Выделить всё
(rele1state == rele1mode == value_off <= dht11_h)
и у меня порвался шаблон
-
alexsis_76
- Сообщения: 791
- Зарегистрирован: Пт янв 22, 2016 10:08 am
-
Благодарил (а):
6 раз
-
Поблагодарили:
63 раза
Сообщение
alexsis_76 » Сб июл 14, 2018 11:12 am
вообще то вместо if (rele1state == 1) можно написать if (rele1state) и будет правильно.