Программа не хочет работать по событию (ям)

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

  1. msa

    msa Нуб

    Добрый день.
    Делаю, значит, поливашку для уборки помещения под управление Arduino - две направляющие, по которым с помощью мотора перемещаются две рампы с форсунками, из которых распыляется вода. В начале направляющих стоит концевой датчик, в конце тоже. По идее система должна работать так: после нажатия кнопки "пуск", если датчик парковки зажат, включаются поливашки (режим "предуборка"), через некоторое время они начинают движение вперёд (режим "очистка"), по достижении концевика поливашка останавливается, льёт ещё какое-то время (состояние "холд") и, выключив оросители, возвращается назад до тех пор, пока не упрётся в датчик парковки. После этого она должна войти в режим "парковка" и ждать нового нажатия кнопки.
    Я попробовал написать программу, но она не работает так, как предполагается. После загрузки в ардуину она сама запускается и тупо гоняет режимы по кругу, никак не реагируя (или реагируя, но это невозможно понять) на нажатие кнопок на макетке.
    Подскажите, что с программой не так, я уже голову сломал.
    Можете бросить тапком - это первая в моей жизни программа, я всё пойму.

    Код (C++):
    #define POLIVAKAFRONT 4 //передняя поливашка
    #define POLIVAKABACK 5 //задняя поливашка
    #define KONIEC 6 //концевой выключатель

    #define PARKINGSWITCH 3 //датчик парковки в исходное состояние
    #define SWITCHPIN 8 //кнопка запуска

    #define MOTORBACK 11 //Движок назад
    #define MOTORFORWARD 12  // Движок вперёд
    #define TESTLEDCLEANUP 10 //Тестовые диоды состояний
    #define TESTLEDBACKROLL 9
    #define TESTLEDPARKING 2



    //СОСТОЯНИЯ СИСТЕМЫ
    #define STATE_CLEANUP 14
    #define STATE_BACKROLL 15
    #define STATE_PARKING 18
    #define STATE_FAILURE 19
    #define STATE_PRECLEAN 20
    #define STATE_HOLD 21


    int systemState = STATE_PARKING;

    bool wasButtonDown = false;


    void setup()                     // Назначения пинов
    {
      pinMode(POLIVAKAFRONT, OUTPUT);
      pinMode(POLIVAKABACK, OUTPUT);
      pinMode(SWITCHPIN, INPUT);
      pinMode(KONIEC, INPUT);
      pinMode(PARKINGSWITCH, INPUT);
      pinMode(MOTORFORWARD, OUTPUT);
      pinMode(MOTORBACK, OUTPUT);
      pinMode (TESTLEDCLEANUP, OUTPUT);
    pinMode (TESTLEDBACKROLL, OUTPUT);
    pinMode (TESTLEDPARKING, OUTPUT);
    }

    void loop() {

      //логика действий поливашки


    bool isButtonDown = digitalRead(SWITCHPIN);
      if (isButtonDown && !wasButtonDown) {

          systemState = STATE_PRECLEAN;

    delay(10);

      }

      wasButtonDown = isButtonDown;

    if (systemState = STATE_PRECLEAN && digitalRead(PARKINGSWITCH == HIGH))            //ПРЕДОЧИСТКА
    {
        digitalWrite(TESTLEDPARKING, LOW);
        digitalWrite(TESTLEDCLEANUP, HIGH);
        delay(1000);
        digitalWrite(POLIVAKAFRONT, HIGH); //включаем переднюю поливаку
        delay(10000);                       //держим включенной 10 секунд
        digitalWrite(POLIVAKAFRONT, LOW);  //выключаем переднюю поливаку
        digitalWrite(POLIVAKABACK, HIGH);      //и включаем заднюю
        delay(5000);  }                       //ждём 5 секунд, чтобы намокла щетка
        systemState = STATE_CLEANUP;
     
    if (systemState = STATE_PRECLEAN && digitalRead(PARKINGSWITCH == LOW))
         {systemState = STATE_FAILURE;
         }
                                                                                                 //АВАРИЯ
    if (systemState = STATE_FAILURE) {
       digitalWrite(POLIVAKAFRONT, LOW);
      digitalWrite(POLIVAKABACK, LOW);


    digitalWrite(MOTORFORWARD,LOW);
    digitalWrite(MOTORBACK, LOW);
     digitalWrite (TESTLEDCLEANUP, LOW);
    digitalWrite(TESTLEDBACKROLL, LOW);
    digitalWrite(TESTLEDPARKING, HIGH);
    }
                                                                                             
     

    else if (systemState == STATE_CLEANUP && digitalRead(KONIEC == LOW))                            //УБОРКА
       {
        digitalWrite(TESTLEDCLEANUP, HIGH);
        digitalWrite(MOTORFORWARD, HIGH);
        digitalWrite(POLIVAKABACK, HIGH);
        delay(3000);
       }
    else if (systemState == STATE_CLEANUP && digitalRead(KONIEC == HIGH))
    delay(10);
       {
        digitalWrite(TESTLEDCLEANUP, LOW);
        digitalWrite(MOTORFORWARD, LOW);
        systemState = STATE_HOLD;
       }



    if (systemState == STATE_HOLD);                                                     //ХОЛД
         { digitalWrite(POLIVAKAFRONT, HIGH);
        digitalWrite(POLIVAKABACK, HIGH);      
        delay(5000);
        systemState == STATE_BACKROLL;
         }

             
                                                                                      //ЗАДНИЙ ХОД
    if (systemState = STATE_BACKROLL && digitalRead (PARKINGSWITCH == LOW))
    { digitalWrite(TESTLEDBACKROLL, HIGH);
       digitalWrite(TESTLEDCLEANUP, LOW);
        digitalWrite(MOTORBACK, HIGH);
        digitalWrite(POLIVAKABACK, LOW);
        digitalWrite(POLIVAKAFRONT, LOW);
        digitalWrite(MOTORFORWARD, LOW);
        delay (3000);
     
      }
    else if (systemState = STATE_BACKROLL && digitalRead (PARKINGSWITCH == HIGH))
    {
        delay(10);              
        digitalWrite(MOTORBACK, LOW);
        systemState = STATE_PARKING;
     
      }
       

        else (systemState = STATE_PARKING); {
       digitalWrite(TESTLEDBACKROLL, LOW);
        digitalWrite(TESTLEDPARKING, HIGH);
        digitalWrite(MOTORBACK, LOW);
        digitalWrite(POLIVAKABACK, LOW);
        digitalWrite(MOTORFORWARD, LOW);


      }


    }
     
     
  2. msa

    msa Нуб

    Всё, вроде пошло дело, вопрос был в неправильной расстановке знаков. Закройте тему или удалите, более не актуально.