По условию if
- Войдите на сайт для отправки комментариев
Вс, 20/06/2021 - 15:47
Доброго времени суток.
Хочу по модулю времени и датчику температуры управлять пином, использую такое условие:
if (watch.Hours>=0 && watch.Hours<=5 || watch.Hours>=9 && watch.Hours<=24 && ds.getTempC(sensor1) < 70 && peregrev1 == true)
смысл такой - работать с 9 утра до 5 утра, не превышая температуру на датчике. Меня смущает наличие двух операндов, лог. ИЛИ и лог.И
Будут ли они работать
или как оптимизировать этот код
благодарю заранее
Доброго времени суток.
Хочу по модулю времени и датчику температуры управлять пином, использую такое условие:
if (watch.Hours>=0 && watch.Hours<=5 || watch.Hours>=9 && watch.Hours<=24 && ds.getTempC(sensor1) < 70 && peregrev1 == true)
смысл такой - работать с 9 утра до 5 утра, не превышая температуру на датчике. Меня смущает наличие двух операндов, лог. ИЛИ и лог.И
Будут ли они работать
или как оптимизировать этот код
благодарю заранее
1) будут, именно это условие написано правильно. Это не касается иных ошибок или логического не соответствия желаемого с описанным.
2) что именно нужно оптимизировать?
3) немного громоздко, но лучше сперва создать переменные, а потом эти переменные сравнивать
Меньше нуля часов не бывает. Как и больше 24. Даже 24 не бывает, а больше 24 и подавно.
Верно, не подумал
Подумал что этот код можно сделать лучше
if (watch.Hours>=0 && watch.Hours<=5 || watch.Hours>=9 && watch.Hours<=24 && ds.getTempC(sensor1) < 70 && peregrev1 == true)
с ds.getTempC(sensor1) могут возникнуть проблемы (не обязательно). избавьтесь от функции и используйте переменную в условии
Еще вопрос, для проверки на перегрев использую такое условие:
if (ds.getTempC(sensor1) == 70){peregrev1 = false;} if (ds.getTempC(sensor1) == 40) {peregrev1 = true;}
Но условие отрабатывает не верно, вот этот кусок кода (ds.getTempC(sensor1) < 70), проходит, не ждет пока температура упадет до 40
есть мысли?
Еще вопрос, для проверки на перегрев использую такое условие:
if (ds.getTempC(sensor1) == 70){peregrev1 = false;} if (ds.getTempC(sensor1) == 40) {peregrev1 = true;}
Но условие отрабатывает не верно, вот этот кусок кода (ds.getTempC(sensor1) < 70), проходит, не ждет пока температура упадет до 40
есть мысли?
такие строгие условия (выделил) скорее всего не будут выполняться. опишите словами логику работы по этим условиям
if (ds.getTempC(sensor1) >= 70){peregrev1 = false;} if (ds.getTempC(sensor1) <= 40) {peregrev1 = true;}
так сделал и заработало
вообще смыл такой был, если темп достигнет 70 градусов, отключить прибор и ждать пока не упадет до 40, потом включить
if (ds.getTempC(sensor1) >= 70){peregrev1 = false;} if (ds.getTempC(sensor1) <= 40) {peregrev1 = true;}
так сделал и заработало
как то не могу переварить название переменной peregrev1... тут по логике слово нагрев подходит больше.
если <40C включаем нагрев
если >70C выключаем нагрев
называется гистерезис.
Загуглю гестерезис, спасибо
как то не могу переварить название переменной peregrev1... тут по логике слово нагрев подходит больше.
если <40C включаем нагрев
если >70C выключаем нагрев
Думаю тут просто true и false перепутаны.
если >70C "мотор" перегрелся, выключаем.
если < 40C "мотор" остыл, включаем.
if (watch.Hours>=0 && watch.Hours<=5 || watch.Hours>=9 && watch.Hours<=24 && ds.getTempC(sensor1) < 70 && peregrev1 == true)
смысл такой - работать с 9 утра до 5 утра, не превышая температуру на датчике.
В данном условии ночью результат не зависит от температуры. Это так и задумано? Если нет, пользуйтесь скобками.
Так и задумано, работать 20 часов в сутки, не превышая 70 градусов, если достиг 70, отключить устройство и ждать пока температура остынет до 40
Смотрите что будет в час ночи при температуре 71 градус.
Я без скобок логику условия вообще не понимаю....
Это ваш плюс или "их" минус?
Это факт )))
С таким условием с 0 до 5 часов всегда будет true, с 6 до 8 всегда false, с 9 до 23 будет зависеть от температуры и флага. Вроде, так.
Как вариант можно и без скобок, но будет не оптимально.
А GCC допускает && и || без скобок? Никаких предупреждений?
А GCC допускает && и || без скобок? Никаких предупреждений?
Я неправильно выразился, без дополнительных скобок записать выражение, которое хочет ТС. В моём понимании чего он хочет.
А вот в понимании компилятора:
Согласен, был не прав.
Но можно ещё и по нескольким if-ам раскидать.