While & Serial

Тема в разделе "Arduino & Shields", создана пользователем SSnick, 10 июл 2014.

  1. SSnick

    SSnick Гик

    Всем привет.
    Разьясните ситуацию, пожалуйста.
    Идея - отсылаем по сериалу на ардуину с компа "1" - ардуино мигает в одной последовательности лампочек, отправляем "2" - в другой последовательности. Причем при отсылке на ардуино команды запуска функции перебора на компьютер обратно отсылается информация о принятой команде (1 или 2) и проверочная информация (это уже для себя как проверка) - какой именно массив, цикл работает. Но при работе, происходят сбои: При отсылке "1" - процесс зацикливается в первом цикле и выйти из него уже не получается... даже при отсылке "2" - ардуино ее не воспринимает почему то... почему?

    Код (Text):
    int pin13 =13;
    int pin12 =12;
    int pin11 =11;
    int pin10 =10;
    byte massive1[] ={13,12,11,10};
    byte massive2[] ={10,11,12,13};

    void setup()
    {
        pinMode(pin13, OUTPUT);
        pinMode(pin12, OUTPUT);
        pinMode(pin11, OUTPUT);
        pinMode(pin10, OUTPUT);
        Serial.begin(9600);
    }

    void loop()
    {
        while(Serial.available()==0);
        int val = Serial.read() -'0';
       
        while(val == 1)
        {
            for(int i =0; i<4; i++)
              {
                  Serial.println("Massive 1 is working ");
                  Serial.println(massive1[i]);
                  Serial.println(val);
                  digitalWrite(massive1[i],HIGH);
                  delay(5);
                  digitalWrite(massive1[i],LOW);
                  delay(400);
            }
        }
           
        while(val == 2)
        {
            for(int i =0; i<4; i++)
              {
                  Serial.println("Massive 2 is working ");
                  Serial.println(massive2[i]);
                  Serial.println(val);
                  digitalWrite(massive2[i],HIGH);
                  delay(5);
                  digitalWrite(massive2[i],LOW);
                  delay(400);
            }  
        }
    }
     
  2. Megakoteyka

    Megakoteyka Оракул Модератор

    Как же программа примет очередную команду, если она крутится в бесконечном цикле while(val == 1)?

    Код (Text):
    int pin13 =13;
    int pin12 =12;
    int pin11 =11;
    int pin10 =10;
    byte massive1[] ={
      13,12,11,10};
    byte massive2[] ={
      10,11,12,13};

    void setup()
    {
      pinMode(pin13, OUTPUT);
      pinMode(pin12, OUTPUT);
      pinMode(pin11, OUTPUT);
      pinMode(pin10, OUTPUT);
      Serial.begin(9600);
    }

    int val = 0;

    void loop()
    {
      while(Serial.available()==0);
      val = Serial.read() -'0';

      if(val == 1)
      {
        for(int i =0; i<4; i++)
        {
          Serial.println("Massive 1 is working ");
          Serial.println(massive1[i]);
          Serial.println(val);
          digitalWrite(massive1[i],HIGH);
          delay(5);
          digitalWrite(massive1[i],LOW);
          delay(400);
        }
      }

      if(val == 2)
      {
        for(int i =0; i<4; i++)
        {
          Serial.println("Massive 2 is working ");
          Serial.println(massive2[i]);
          Serial.println(val);
          digitalWrite(massive2[i],HIGH);
          delay(5);
          digitalWrite(massive2[i],LOW);
          delay(400);
        }
      }
    }
     
  3. SSnick

    SSnick Гик

    Вот тут она разве не должна ее принять? если нет, то почему? Выражение присваивания не находится в теле цикла
     
  4. Megakoteyka

    Megakoteyka Оракул Модератор

    Чтобы сюда попасть, нужно сперва из цикла выйти.