Чтение из Serial в String, подскажите.

Тема в разделе "Arduino & Shields", создана пользователем ampedr, 17 фев 2016.

  1. ampedr

    ampedr Нерд

    Здравствуйте, изучая работу передачи Serial данных столкнулся с одной проблемой, не получается записать принимаемые данные с Serial порта в String переменную.
    С порта Serial я ожидаю обычную текстовую информацию (пример:Hello Word!), размер которой заранее неизвестен.
    Кусок кода, как это происходит:
    Код (Text):

    ////////// char inChar[]={};
    char inChar[555];
    int z = 0;
    if (mySerial.available() > 0) {
    while (mySerial.available() > 0) {
      inChar[z] = (mySerial.read());
      delay(10);
      z++;
    }
    }
    String stringOne = String(inChar);
    Serial.println(stringOne);
     
    Проблемы с которыми я сталкиваюсь, из mySerial.read() нельзя записывать напрямую в String переменную, потому что в неё вместо текста запишутся Char цифры, и уже из переменной String все эти цифры едва ли предоставляется возможным сконвертировать в нормальный текст. (Если это можно, то тоже подскажите)
    Далее, записывать можно в переменную char массивов. И вот тут проблема, если обозначить переменную для записи так:
    char inChar[]={};
    То в неё ничего не записывается в большинстве случаев, но иногда записываются обрывки информации. Объяснение этому я так и не смог найти.
    Если указывать размер массива от балды, но заведомо больше чем примерно должны придти данные, допустим так:
    char inChar[555];
    Тогда данные в него начинают записываться, но дальше, все оставшиеся байты заполняются бинарным мусором...
    Дальше я уже конвертирую в String всё это дело и вывожу в отладочную консоль:
    String stringOne = String(inChar);
    Serial.println(stringOne);
    Тут варианты... или обрезать из переменной всё, что идёт после \r\n (1310 в char), или как то иначе... Мне кажется с обрезанием это не совсем правильный путь.
    Буду очень рад, если подскажете как это реализовать правильно.
     
  2. AlexVS

    AlexVS Гик

    Может нужно так:
    Код (C++):
    String readString;

    void loop()
    {
    ..........
      char c = mySerial.read();
      readString.concat(c);
    ............
    }
     
     
    ampedr нравится это.
  3. ampedr

    ampedr Нерд

    Да! То что нужно, спасибо большое. Как всё оказалось просто.