Помогите правильно сделать алгоритм счетчика

AROKH
Offline
Зарегистрирован: 08.04.2016

Ребят, помогите с алгоритмом решения

Функция: в цикле опрашиваются несколько датчиков и там же в условиях запускается их коррекция.
Если значение ВСЕХ датчиков установилось, нужно выйти из цикла.
Скетча нет под рукой, но логику и так, наверное, подскажете.

for {
    if мало - увеличить
    else if много - уменьшить
    else XXXXXX 

     if мало - увеличить
    else if много - уменьшить
    else YYYYY

     if мало - увеличить
    else if много - уменьшить
    else ZZZZZ
}

 Когда сработали и XXXX и YYYYY и ZZZZZ (все), то  выход из цикла. Как реализовать?

Если просто х++ в каждом последнем элсе и проверка х==3 то насчитает много, ибо плюсует каждый цикл, а датчики устанавливают показания за разный период времени.
То есть XXXX  YYYYY уже соответствуют нужному условию, а ZZZZZ все еще продолжает коррекцию
Туплю, не могу придумать как сделать(((

 

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

if (XXXX и YYYYY и ZZZZZ) break;

AROKH
Offline
Зарегистрирован: 08.04.2016

АААА!!!
Точно!
Можно ж проверить, что датчики не корректируются по LOW на выходах.
Спасибо!
Пора в отпуск)))

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Andy пишет:

if (XXXX и YYYYY и ZZZZZ) break;

А лучше тоже самое в самом for записать (во второй секции for). Типа так:

for (boolean xxx=false, yyy=false, zzz=false; ! (xxx && yyy && zzz); ) {
     if (..) ...;
     else if (..) ...;
     else xxx = true;

     if (..) ...;
     else if (..) ...;
     else yyy = true;

     if (..) ...;
     else if (..) ...;
     else zzz = true;
}

 

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

if (мало - увеличить)... А откуда известно что мало-то? С чем-то же сравнивается у тебя там?

Полюбому сравниваются X,Y и Z, с какими-то другими переменными X1, Y1 и Z1.

Условие выхода укажи в самом начале да и всё:

while (X != X1 && Y != Y1 && Z !=Z1) {
	    if мало - увеличить
	    else if много - уменьшить
	    else XXXXXX
	 
	     if мало - увеличить
	    else if много - уменьшить
	    else YYYYY
	 
	     if мало - увеличить
	    else if много - уменьшить
	    else ZZZZZ
	}

Или:

If (X=X1 && Y=Y1 && Z=Z1) {return};

AROKH
Offline
Зарегистрирован: 08.04.2016

Показания датчиков сравниваются с "нормативом"
Если мало - включается один вывод
Если много - второй вывод
Если "норма" - оба вывода остаются выключены.

И так на нескольких датчиках одновременно.

Да понял я, понял))) Уже справлюсь))
Я ж говорю, протупил с логикой, ардуино мне непривычен.
Я все еще "думаю" мерками школьного бейсика. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

AROKH пишет:

Я все еще "думаю" мерками школьного бейсика. 

А какая разница? Там всё точно также. Если есть знания - уважайте их, не принижайте и не бойтесь применять.