Разбор строки из Serial

Тема в разделе "Arduino & Shields", создана пользователем Felix102, 29 июн 2019.

  1. Felix102

    Felix102 Нерд

    Как подобное реализуется? Либо что изучить?

    По сериал приходят строки типа : 'lamp1_255' / 'lamp2_128' , откуда я должен извлечь номер лампы и сигнал ШИМ.
     
    Последнее редактирование: 29 июн 2019
  2. parovoZZ

    parovoZZ Гуру

    Посимвольно. Если символ не совпал, то ищем пробел, слэш ну и так далее.
     
  3. SergeiL

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

    Если по сериал приходит что - то, то это значит что, что то загрузили в плату.
    “что то” в предыдущем предложении означает что ТС не понимает, что делает :) .
    Поэтому нужно разобраться что нужно и что грузится. :)
     
  4. Felix102

    Felix102 Нерд

    хочется поэлегантнее решение так как могут быть разные сообщения
     
  5. Felix102

    Felix102 Нерд

    ничего не понял
     
  6. Daniil

    Daniil Гуру

    Вот описание строк на оф сайте. Ссылка
     
  7. SergeiL

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

    Об этом я и говорю...:(
     
  8. parovoZZ

    parovoZZ Гуру

    Нет. Везде есть правила. Если этим правилам не следовать, то получится бардак. Пример - HTML. В принципе, там можно передавать любой текст. Но чтобы его грамотно отобразить, его необходимо поместить в ОПРЕДЕЛЕННЫЕ СТАНДАРТОМ ТЕГИ. Если этого не делать, то ничего передать не получится - приемная сторона просто не сможет распарсить.
     
  9. DetSimen

    DetSimen Guest

    ТС, гугли за "лексический анализатор"
     
  10. a1000

    a1000 Гик

    Тогда вам надо рассмотреть все возможные варианты и описать поиск нужного вам элемента строки для всех случаев.
     
  11. b707

    b707 Гуру

    все "элегантные решения" основаны на том же принципе - сначала надо в строчке найти букву "l", потом за ней букву "a" и далее все буквы слова. За ними должна идти цифра, потом подчеркивание...
    На больших компах для этого сущесвтвуют специальные библиотеки поиска, например с регулярными выражениями (погуглите)
    Но в ардуину эти библиотеки не влезут, здесь придется писать вручную. Ну или почти вручную ...

    Поэтому советую отказаться от "понятных человеку" символьных сообщений, а перейти на цифровые коды. Код программы существенно упростится
     
    Последнее редактирование: 30 июн 2019
    Daniil и Airbus нравится это.
  12. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Справочник Ардуины. Раздел String - объект.
    Код (C++):
    void loop() {   // put your main code here, to run repeatedly:

      if (stringComplete)  {                           // Если строка получена полностью
      if (inputString.substring(0, 6) == "A-o-L ")  {  // Если строка начинается с "A-o-L "

         Command = inputString.substring(6, 9);        // Выделяем команду
         PinNum =  inputString.substring(9, 12);           // Выделяем номер пина текстовый
     
         I = PinNum.toInt();                           // Номер пина в виде переменной
       
      if (Command == "On ")  {     // Если на позиции стоит "On "
         digitalWrite(I, HIGH);
      }
      if (Command == "Off")  {     // Если на позиции стоит "Off"
         digitalWrite(I, LOW);
      }
      if (Command == "PWM")  {     // Если на позиции стоит "PWM"
         PinVol = inputString.substring(16);
         L= PinVol.toInt();
         analogWrite(I, L);
      }

        Serial.print(Command);    // print the string when a newline arrives:
        Serial.println(I);
     
        inputString = "";         // clear the string:
        stringComplete = false;
       }
      }
    }                             // Бесконечный цикл
    //=========================================================================
    /*
    ПС. Без поллитра сразу не вьедешь в это substring(6, 9);
    6 - позиция начала искомой строки, если считаешь с нуля - 0, 1, 2...
    9 - позиция, следующая ЗА окончанием искомой строки, т.е. уже НЕ нужная инфа.
    Круто !
     
    Последнее редактирование: 30 июн 2019
  13. Felix102

    Felix102 Нерд

     
  14. Felix102

    Felix102 Нерд

    спасибо. это то что нужно