Не корректно работает String

Тема в разделе "Arduino & Shields", создана пользователем Kamikadze, 7 дек 2017 в 15:15.

  1. Kamikadze

    Kamikadze Нерд

    Добрый день подскажите пожалуйста в чем может быть ошибка, вот Скетч Ардуино Приемника
    Код (C++):
    #include <Wire.h>

                 
    char Str1[15];
    char Strl2[15];
    //String stringOne =  String(123);
    //char *Str1=stringOne.c_str(); //перевод из стринг в чар!!!
    //int y = 1;

    void setup()
    {
      Wire.begin(4);                // подключаем шину I2C с адресом #4
      Wire.onReceive(receiveEvent); // регистрируем событие
      Serial.begin(9600);           // запускаем последовательную передачу данных, чтобы отображать данные на Serial Monitor
     
    }
    void loop()
    {
      //Serial.println(y = y+atoi(Str1));
      //Serial.println(mCos[3][0], 4);
      delay(30);
      //while(1);
    }
    // Эта функция будет выполнятся всякий раз, когда от ведущей платы
    // будут получены какие-либо данные.
    // Она зарегистрирована как событие (см. блок setup):
    void receiveEvent(int howMany)
    {
      Str1[0] = Wire.read();        // получаем байт как целое число
      Str1[1] = Wire.read();
      Str1[2] = Wire.read();
      Str1[3] = Wire.read();
      Str1[4] = Wire.read();
      Str1[5] = Wire.read();
      Str1[6] = Wire.read();
      Str1[7] = Wire.read();
      Str1[8] = Wire.read();
      Str1[9] = Wire.read();
      Str1[10] = Wire.read();
      Str1[11] = Wire.read();
      Str1[12] = Wire.read();
      Str1[13] = Wire.read();
     
      String stringOne = String (Str1);
      int simbolPerviy = stringOne.indexOf("_");    //ищем первое вхождение символа "_"
      int simbolVtoroy = stringOne.lastIndexOf("_");
      if (simbolPerviy != -1)   //если символ _ найден тогда
      {
        //Serial.println(stringOne.substring(0, simbol));
        String subOne = String (stringOne.substring(0, simbolPerviy)); //подстроке присваиваем значения до первой черты
        if (simbolPerviy != simbolVtoroy)
        {
          String subTwo = String (stringOne.substring(simbolPerviy+1, simbolVtoroy)); //присваиваем оставшуюся часть
          String subTri = String (stringOne.substring(simbolVtoroy+1));
        }
        else
        {
          String subTwo = String (stringOne.substring(simbolPerviy+1, simbolVtoroy));
        }
        Serial.println(subOne);
        Serial.println(subTwo);
        Serial.println(subTri);
      }
    }
    При компиляции выдает ошибку и скетч не заливается Если в самом конце скетча закоментировать
    Код (C++):
        Serial.println(subTwo);
        Serial.println(subTri);
    то скетч заливается и собственно показывает первый массив корректно
     
  2. AlexU

    AlexU Гуру

    Переменные 'subTwo' и 'subTri' объявлены локально внутри блоков. Вне этих блоков они не видны.
     
    arkadyf, БАРМАТОГРАФ и Kamikadze нравится это.
  3. Kamikadze

    Kamikadze Нерд

    Точно! Спасибо огромное!!!!!!!!