не выходит из цикла for
- Войдите на сайт для отправки комментариев
Чт, 23/03/2017 - 19:44
Доброго здравия. Господа, есть ардуина, датчик температуры, кнопка
int t=0; int set_temp=20; t=dht.readTemperature();
if (lastOnTempButton == LOW && currentOnTempButton == HIGH) { for (int i = 10; i >= 0; i--) { digitalWrite(FAN, HIGH); lcd.print(i); delay(1000); } }
При нажатии на кнопку логика срабатывает на 10сек. Работает как часы.
Теперь же, если добавить условие срабатывания логики по температуре, ардуина не выходит из цикла for.
if (t>set_temp) { for (int i = 10; i >= 0; i--) { digitalWrite(FAN, HIGH); lcd.print(i); delay(1000); } } else { digitalWrite(FAN, LOW); }
Что хочу реализовать данным куском кода? При выполнении условия включать нагрузку на силовре реле на 1-2-3 минуты. Подскажите, как все таки выйти из цикла? Добра и печенек вам!
Не здесь ли, случайно, проблема:
Зачение "t" какое получаете с датчика?
Как определили, что не выходит из цикла? Что ожидается получить после его отработки?
Не получается ли у вас так, что по условию выполняется цикл, и при новом "витке" loop условие опять выполняется и вновь начинает работать цикл?
ПыСы. Прервать "насильно" любой цикл можно оператором break. Пропустить "виток" цикла оператор continue.
fogary
Если бы была проблема в условии, то цикл бы и не выполнялся.
зажимаю термопару пальцами, температура растет, попадаю под условие
результат Serial.println(i);
0
10
9
8
7
6
5
4
3
2
1
0
10
9
8
7
6
5
4
3
2
1
0
10
Если была проблема в условии, то цикл бы и не выполнялся.
Ну, получается, что многократно прогоняется этот цикл, т.к. температура удовлетворяет условию t > set_temp
Вы ждёте, что будет по-другому?
Ну, похоже у ТС как раз такое и происходит. Только проблема не в условии, а в логике.
phoedos, если нужна отработка цикла только один раз, то заводите флаг, в условии если (т>еее && флаг) то крутите цикл, а после цикла сбрасываете флаг в противоположное состояние. При понижении температуры возвращаете флаг обратно, что бы в след. раз цикл мог отработать...
зажимаю термопару пальцами, температура растет, попадаю под условие
результат Serial.println(i);
1. Я не вижу в коде никакого "Serial.println(i);". Давайте Вы будете показывать нам именно тот код, который у Вас вызывает проблемы, а не цену на прошлогодний овёс.
2. Заодно печатайте значения t и set_temp непосредственно перед if
И сразу всё станет ясно.