Датчик давления

Тема в разделе "Arduino & Shields", создана пользователем Artclonic, 7 мар 2018.

  1. Sencis

    Sencis Нерд

    Как-то это топорно if(500 > z ) к тому же каждому оператору if принадлежит своя else или
    else if(...) но никак не две else после двух if используйте тогда switch case.
     
    Последнее редактирование: 11 мар 2018
  2. Belkin

    Belkin Гик

    Для таких случаев имеется такая штука - "флаг".
    Это переменная, незадействованная больше ни в каких операциях, только как "сигнальная".
    В ней можно побитно указывать состояние того или иного процесса.
    Например, выполнили "операцию 1" - установили бит 0 в "1".
    При выполнении "операции 2" проверили - а есть ли "1" в бите 0 флага ?
    Если есть, то не выполняем "операцию 2", если там "0", то выполняем.

    Идея понятна ? ;)
     
  3. Artclonic

    Artclonic Гик

    Ближе для меня условия и циклы...Тут хоть какое то понимание есть....

    У меня же к каждому If своя else.... По поводу else if(...) - у меня же два разных - не связаннх между собой условия в моем блоке команд... Это не условие в условие...
    Про топорно согласен, исправен..
     
  4. Belkin

    Belkin Гик

    Может, таки z < 500 ? ;)
    Первым идет "что" сравниваем, а вторым - "с чем" сравниваем.

    И потом... В обоих случаях в результате сравнения - "есть вакуум" ? ;)
     
  5. Belkin

    Belkin Гик

    Не надо наседать на Else, эта ветвистость и сама запутается и автора программы до петли доведет...
    Жёсткие условия понятнее в прочтении программы и компилятор пережевывает правильнее.
     
  6. Sencis

    Sencis Нерд

    Смотри у тебя получается проходит по списку if и если не подходят условие тогда else но вторая тогда зачем она никогда не выполнится?
     
  7. Artclonic

    Artclonic Гик

    Да да это понял, с этим разбеусь тут все понятно.... Как зациклить мне ELSE....?
     
  8. Artclonic

    Artclonic Гик

    Да естественно нужно else if(...)... Фухх... Щаз свояю с else if(...), но это не зациклит команды в else -повторит - один раз...
     
  9. Sencis

    Sencis Нерд

    А почему бы просто не добавить в условие цикл?
     
  10. Belkin

    Belkin Гик

    Не надо так делать !

    Если есть необходимость дождаться непременно выполнения какого-либо условия, то только это условие надо закольцевать в Do ... Loop и выходить отсюда при выполнении условия.

    Кольцеваться внутри условия с другим условием - гарантия словить бага.
    Предлагаю почитать на тему стеков, что это и как едят. ;)
    В идеале - сначала узнать, как же работает МК, его структуру, а уже потом что-то подключать и учить языки...
    Прошу поверить - отпадет море вопросов, которые здесь на форуме задаются...
     
  11. Sencis

    Sencis Нерд

    Да в идеале стать разработчиком а потом программировать МК))).
     
  12. Artclonic

    Artclonic Гик

    Вот удалил пока все лишнее, как цикл будет выглядеть?
    Код (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;
     
    вот так?
     
  13. Sencis

    Sencis Нерд

    Ну да но если условие z <=500 зачем: ii=0 и ii++? не проще for (; z<=500 ; ) ?

    Непонятно у вас условие в setup или loop если в последнем что-бы не грузить контроллер глупыми циклами вставит вытесняющую многозадачность.
     
    Последнее редактирование: 11 мар 2018
  14. Artclonic

    Artclonic Гик

    А если я вообще только циклы оставлю
    Код (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.
     
    Последнее редактирование: 11 мар 2018
  15. Belkin

    Belkin Гик

    Не, не прав...
    Если условие не удовлетворяется - операция не выполняется ни разу.
    Увы... На МК многозадачностью даже не пахнет...
    Это "что-то новое" кого-то имеет... ;)

    "Мы все учились понемногу
    Чему-нибудь и как-нибудь..." (с) не мое
     
  16. Sencis

    Sencis Нерд

    Смотри:
    Код (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 цикл нужен если нет нужна вытесняющая многозадачность.
     
  17. Sencis

    Sencis Нерд

    я не заметил да нужна многозадачность ну я тебе её скинул уже.
     
  18. Belkin

    Belkin Гик

    Да не многозадачность, а ветвление !
    Ну не надо смешивать теплое с мягким... ;)
     
  19. Artclonic

    Artclonic Гик

    Ну подождите.... А если вот так... все просто Если условие выполнилось - сделает один раз, если не выполнилось, будет повторять пока не выполнится...
    Код (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)

        }
     
  20. Sencis

    Sencis Нерд

    Ну просто я так привык))).