While - не работает два условия ???
- Войдите на сайт для отправки комментариев
Сб, 15/06/2019 - 13:12
Доброго всем дня.
Столкнулся на первый взгляд с "детским" вопросом, но пока решить не смог:
Есть цикл, который вот так выполнять условие не хочет:
while ( (zaderzka < 5) || (millis() < (timer + PZU_data*60*1000)) ) {
...
}
Вотк работает:
while ( zaderzka < 5 ) {
...
}
И так тоже:
while ( millis() <= (timer + PZU_data*60*1000) ) {
...
}
В чем может быть дело ??
Заранее спасибо.
приведите полный код, где проявляется эта проблема. Ошибка явно не в синтаксисе - составное условие вполне легальное и должно работать. Скорее всего у вас ошибка в логике программы.
а если заменить || на && )))
а если так
while ( zaderzka < 5 || millis() < timer + PZU_data*60*1000 ) { ... }а если так
while ( zaderzka < 5 || millis() < timer + PZU_data*60*1000 ) { ... }так тоже работать не будет )))
так тоже работать не будет )))
ну почему, может ТС именно "||" и надо. Хотя вероятность, что он с "&&" перепутал - велика :)
Прекратите детский сад и напишите внятно: 1) чего именно Вы от него ждёте, что он по-Вашему должен делать (т.е. как Вы это условие понимаете),
Оно работает именно так как написано. А чего Вы ждёте мы не знаем.
так тоже работать не будет )))
ну почему, может ТС именно "||" и надо. Хотя вероятность, что он с "&&" перепутал - велика :)
он не перепутал, он неверно решил уравнение )))
Прекратите детский сад и напишите внятно:
Евгений, что вы хотите от человека с ником, в котором есть и "мастер" и "про"? - только детский сад и может быть :)
Прекратите детский сад и напишите внятно: 1) чего именно Вы от него ждёте, что он по-Вашему должен делать (т.е. как Вы это условие понимаете),
Оно работает именно так как написано. А чего Вы ждёте мы не знаем.
Как не знаем, он же написал, что должно отрабатывать на одно из двух условий, что слева, что справа - пишет жеж, что поодиночке работают )))
Цикл While должен прерываться по одному из условий (т.е. OR и AND я не перепутал)
вот полный код теста:
#include <Wire.h> #include <LiquidCrystal_I2C.h> // подключаем библиотеку дисплея I2C LiquidCrystal_I2C lcd(0x27, 20, 4); const byte ButtonStartPin = 4; uint32_t ms = 0; unsigned long m1, m2; unsigned long timer; unsigned long PZU_data = 1; int zaderzka=0; void setup() { lcd.init(); lcd.backlight(); pinMode(ButtonStartPin, INPUT); } void loop() { lcd.setCursor(0, 0); lcd.print("Millis="); lcd.print(millis()); timer = millis(); lcd.setCursor(0, 1); lcd.print("Timer ="); lcd.print(timer); lcd.setCursor(14, 0); lcd.print("TIME"); lcd.setCursor(15, 1); lcd.print(":"); timer = millis(); //zaderzka < 5 //millis() < (timer + PZU_data*60*1000) while ( (zaderzka < 5) || (millis() < (timer + PZU_data*60*1000)) ) { if (millis() - ms > 1000){ m1 = (PZU_data*60*1000 - (millis() - timer)) / 60000; m2 = ((PZU_data*60*1000 - (millis() - timer)) - (m1*60*1000))/1000 ; lcd.setCursor(13, 1); if (m1 > 9){ lcd.print(m1); }else{ lcd.print("0"); lcd.print(m1); } lcd.setCursor(16, 1); if (m2 > 9){ lcd.print(m2); }else{ lcd.print("0"); lcd.print(m2); } ms = millis(); } if (digitalRead(ButtonStartPin)==HIGH) { zaderzka++; delay(500); }else{ zaderzka=0; } lcd.setCursor(7, 3); lcd.print(zaderzka); } lcd.clear(); lcd.setCursor(5, 1); lcd.print("PROGRAM ABORT"); exit(0); }таки перепутали, цикл идёт пока ТРЮ, значит должно быть &&
???
Цикл идет пока ИЛИ не удержали кнопку примерно 3 сек
ИЛИ пока не закончился таймер.
Так откуда && ?, объясните пожалуйста
???
Цикл идет пока ИЛИ не удержали кнопку примерно 3 сек
ИЛИ пока не закончился таймер.
Так откуда && ?, объясните пожалуйста
Не объясню, так каккузнец )))
Поставьте && и проверьте, если работает как вы задумывали, вам ЕвгенийП на пальцах объяснит
Цикл идет пока истинно условие. 1 || 0 -> 1 , т.е. условие остаётся истинным, даже если истинно только одно из "подусловий" . Тут требуется 1 && 0 -> 0, т.е. цикл прекращается, когда любое из "подусловий" превращает результат в false.
Цикл идет пока истинно условие. 1 || 0 -> 1 , т.е. условие остаётся истинным, даже если истинно только одно из "подусловий" . Тут требуется 1 && 0 -> 0, т.е. цикл прекращается, когда любое из "подусловий" превращает результат в false.
вот как я ему мог бы это объяснить, выше же писал, что пока ТРЮ, а как тока не трю ... )))
Спасибо большое - разобрался!
Спасибо большое - разобрался!
так...теперь понятно, что ИЛИ это у нас в голове...
PS "ты проверяй какого пола твой сосед" В.Высоцкий