Не корректная работа класса String

Kamikadze
Offline
Зарегистрирован: 09.03.2017

Добрый день подскажите пожалуйста в чем может быть ошибка, вот Скетч Ардуино Приемника

#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);
  }
}

Если две последние строчки закоментировать

    Serial.println(subTwo);
    Serial.println(subTri);

то скетч заливается и Первfя часть массива отображает корректно Ну то есть subOne. Из-за чего такое может происходить и как в таком случае можно вытянуть данные?

b707
Offline
Зарегистрирован: 26.05.2017

строки subTwo и subTri в этом месте не существуют. Вообще говоря, если эти строчки раскомментировать, скетч и компилироваться не должен.

Kamikadze
Offline
Зарегистрирован: 09.03.2017

Вопрос закрыт решение найдено, переменные были объявлены локально

b707
Offline
Зарегистрирован: 26.05.2017

Kamikadze пишет:
Вопрос закрыт решение найдено, переменные были объявлены локально

Очень полезное правило - прежде чем обвинять системные классы, библиотеки или систему ардуино в "некорректной работе" - ищите ошибки у себя.

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

b707 пишет:

ищите ошибки у себя.

Да, ладно! "У вас тут Фортран не работает!" - это ж классика жанра!

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

ЕвгенийП пишет:
Да, ладно! "У вас тут Фортран не работает!" - это ж классика жанра!

Точно. Фортран перешел в другой отдел!!

ПС:Человек приходит в магазин канцтоваров.

- У вас есть ватман?
- Хе, вспомнили! Ватман уже пол года как в Америке!
- Ну а кульман?
- Кульмана еще год назад посадили!
- Ну а рейсфедер?
- Рейсфедер в отпуске...
- Поймите наконец! Я ДИЗАЙНЕР!!!!
- ну так я вижу, что не Иванов! :-)