Как-то это топорно if(500 > z ) к тому же каждому оператору if принадлежит своя else или else if(...) но никак не две else после двух if используйте тогда switch case.
Для таких случаев имеется такая штука - "флаг". Это переменная, незадействованная больше ни в каких операциях, только как "сигнальная". В ней можно побитно указывать состояние того или иного процесса. Например, выполнили "операцию 1" - установили бит 0 в "1". При выполнении "операции 2" проверили - а есть ли "1" в бите 0 флага ? Если есть, то не выполняем "операцию 2", если там "0", то выполняем. Идея понятна ?
Ближе для меня условия и циклы...Тут хоть какое то понимание есть.... У меня же к каждому If своя else.... По поводу else if(...) - у меня же два разных - не связаннх между собой условия в моем блоке команд... Это не условие в условие... Про топорно согласен, исправен..
Может, таки z < 500 ? Первым идет "что" сравниваем, а вторым - "с чем" сравниваем. И потом... В обоих случаях в результате сравнения - "есть вакуум" ?
Не надо наседать на Else, эта ветвистость и сама запутается и автора программы до петли доведет... Жёсткие условия понятнее в прочтении программы и компилятор пережевывает правильнее.
Смотри у тебя получается проходит по списку if и если не подходят условие тогда else но вторая тогда зачем она никогда не выполнится?
Да естественно нужно else if(...)... Фухх... Щаз свояю с else if(...), но это не зациклит команды в else -повторит - один раз...
Не надо так делать ! Если есть необходимость дождаться непременно выполнения какого-либо условия, то только это условие надо закольцевать в Do ... Loop и выходить отсюда при выполнении условия. Кольцеваться внутри условия с другим условием - гарантия словить бага. Предлагаю почитать на тему стеков, что это и как едят. В идеале - сначала узнать, как же работает МК, его структуру, а уже потом что-то подключать и учить языки... Прошу поверить - отпадет море вопросов, которые здесь на форуме задаются...
Вот удалил пока все лишнее, как цикл будет выглядеть? Код (C++): void setup() { pinMode(ob11, OUTPUT); pinMode(ob12, OUTPUT); pinMode(ob13, OUTPUT); pinMode(ob14, OUTPUT); pinMode(z, INTPUT); } // case 1: // блок команд на чтение значения «1» { digitalWrite(ob11, HIGH); //Включение элемента №1 (Блок I) digitalWrite(ob11,LOW); //Выключение элемента №1 (Блок I) digitalWrite(ob12, HIGH); //Включение элемента №2 (Блок II) digitalWrite(ob12,LOW); //Выключение элемента №2 (Блок II) if(z <=500 ) // есть вакуум { digitalWrite(ob13, HIGH); //Включение элемента №3 (Блок III) digitalWrite(ob13,LOW); //Выключение элемента №3 (Блок III) digitalWrite(ob14, HIGH); //Включение элемента №4 (Блок IV) digitalWrite(ob14,LOW); //Выключение элемента №4 (Блок IV) } else // нет вакуума { for (ii=0;z <=500; ii++){ //цикл { digitalWrite(ob12, HIGH); //Включение элемента №2 (Блок II) digitalWrite(ob12,LOW); //Выключение элемента №2 (Блок II) } } } // break; вот так?
Ну да но если условие z <=500 зачем: ii=0 и ii++? не проще for (; z<=500 ; ) ? Непонятно у вас условие в setup или loop если в последнем что-бы не грузить контроллер глупыми циклами вставит вытесняющую многозадачность.
А если я вообще только циклы оставлю Код (C++): void setup() { pinMode(ob11, OUTPUT); pinMode(ob12, OUTPUT); pinMode(ob13, OUTPUT); pinMode(ob14, OUTPUT); pinMode(z, INTPUT); } // case 1: // блок команд на чтение значения «1» { digitalWrite(ob11, HIGH); //Включение элемента №1 (Блок I) digitalWrite(ob11,LOW); //Выключение элемента №1 (Блок I) for (; z<=500 ; ) { digitalWrite(ob12, HIGH); //Включение элемента №2 (Блок II) digitalWrite(ob12,LOW); //Выключение элемента №2 (Блок II) } for (; z>500 ; ) { digitalWrite(ob13, HIGH); //Включение элемента №3 (Блок III) digitalWrite(ob13,LOW); //Выключение элемента №3 (Блок III) } digitalWrite(ob14, HIGH); //Включение элемента №4 (Блок IV) digitalWrite(ob14,LOW); //Выключение элемента №4 (Блок IV) } // break; Т.е. он должен сделать цикл один раз, если условие удовлетворяется и много раз (пока Z -удовлетворится). Только вот сама переменная Z - меняться? И усе!!! Я прав? Без всяких условии - только цикл. Про многозадачность... я так сразу все не могу охватить (я имею что то новое...) Условие в loop.
Не, не прав... Если условие не удовлетворяется - операция не выполняется ни разу. Увы... На МК многозадачностью даже не пахнет... Это "что-то новое" кого-то имеет... "Мы все учились понемногу Чему-нибудь и как-нибудь..." (с) не мое
Смотри: Код (C++): void setup() { pinMode(ob11, OUTPUT); pinMode(ob12, OUTPUT); pinMode(ob13, OUTPUT); pinMode(ob14, OUTPUT); pinMode(z, INTPUT); } setup выполняется один раз далее: Код (C++): { digitalWrite(ob11, HIGH); //Включение элемента №1 (Блок I) digitalWrite(ob11,LOW); //Выключение элемента №1 (Блок I) for (; z<=500 ; ) { digitalWrite(ob12, HIGH); //Включение элемента №2 (Блок II) digitalWrite(ob12,LOW); //Выключение элемента №2 (Блок II) } for (; z>500 ; ) { digitalWrite(ob13, HIGH); //Включение элемента №3 (Блок III) digitalWrite(ob13,LOW); //Выключение элемента №3 (Блок III) } digitalWrite(ob14, HIGH); //Включение элемента №4 (Блок IV) digitalWrite(ob14,LOW); //Выключение элемента №4 (Блок IV) } Это где? если в setup цикл нужен если нет нужна вытесняющая многозадачность.
Ну подождите.... А если вот так... все просто Если условие выполнилось - сделает один раз, если не выполнилось, будет повторять пока не выполнится... Код (C++): { digitalWrite(ob11, HIGH); //Включение элемента №1 (Блок I) digitalWrite(ob11,LOW); //Выключение элемента №1 (Блок I) digitalWrite(ob12, HIGH); //Включение элемента №2 (Блок II) digitalWrite(ob12,LOW); //Выключение элемента №2 (Блок II) for (; z<=500 ; ) { digitalWrite(ob12, HIGH); //Включение элемента №2 (Блок II) digitalWrite(ob12,LOW); //Выключение элемента №2 (Блок II) } for (; z>500 ; ) { digitalWrite(ob13, HIGH); //Включение элемента №3 (Блок III) digitalWrite(ob13,LOW); //Выключение элемента №3 (Блок III) } digitalWrite(ob13, HIGH); //Включение элемента №3 (Блок III) digitalWrite(ob13,LOW); //Выключение элемента №3 (Блок III) digitalWrite(ob14, HIGH); //Включение элемента №4 (Блок IV) digitalWrite(ob14,LOW); //Выключение элемента №4 (Блок IV) }