Получить конкретный элемент из текста, разделенного запятыми

Я использую bluetooth (работает как последовательный монитор). Допустим, я посылаю текст на свой hc-05 (то же самое, что и на последовательный монитор) Мой текущий код отображает текст с последовательного монитора/HC-05 НА жидкокристаллический дисплей

#include <LiquidCrystal.h>

LiquidCrystal lcd(4, 6, 10, 11, 12, 13);
String readString;

void setup() {
  Serial.begin(9600);
  lcd.begin(16, 2);
}

void loop() {
  while(Serial.available()){
    delay(50);
    char c=Serial.read();
    readString+=c;
  }
  if(readString.length()>0){
    Serial.println(readString);
      lcd.clear();
      lcd.print(readString);
    readString="";
  }
}
from serial monitor i type `a,b,c,d`

теперь моя цель просто получить а и дисплей на жидкокристаллическом дисплее

или

другими словами, я хочу получить значение b c d в тексте, который является CSV для списка или массива, и получить значение для индекса 1,2,3,4

ИЛИ

разделить строку разделителем

так как же мне это сделать

подробности-ARUINO UNO

, 👍0


2 ответа


Лучший ответ:

1

я искал в stack exchange Arduino, но я не получил ответ, поэтому я опубликовал, но когда я искал в stack over flow, я получил ссылку это мой окончательный код

String part01;
String getValue(String data, char separator, int index)
{
  int found = 0;
  int strIndex[] = {0, -1};
  int maxIndex = data.length()-1;

  for(int i=0; i<=maxIndex && found<=index; i++){
    if(data.charAt(i)==separator || i==maxIndex){
        found++;
        strIndex[0] = strIndex[1]+1;
        strIndex[1] = (i == maxIndex) ? i+1 : i;
    }
  }

  return found>index ? data.substring(strIndex[0], strIndex[1]) : "";
}

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  String part01 = getValue("523;524;525",';',1);
  Serial.println(part01);

}
,

2

Используйте функцию strtok.

От вундеркиндов к вундеркиндам (https://www.geeksforgeeks.org/strtok-strtok_r-functions-c-examples/):

аргументы:

  • str: Строка, которая должна быть разделена
  • delim: Символ, на основе которого будет сделано разделение Возвращаемого значения

Функция выполняет одно разделение и возвращает указатель на разделенный токен. Нулевой указатель возвращается, если строка не может быть разделена.

,

Обратите внимание, что для использования strtok() вам сначала придется отказаться от использования String, что в любом случае хорошо., @Majenko

но пример для c++ можете ли вы привести пример для Arduino, @hifi tech

@hifitech Несмотря на то, что строку Arduino/C++ можно использовать, это не очень хорошая идея из-за очень низкого уровня SRAM, который есть у Arduino Uno. Я предполагаю, что с функцией по умолчанию и множеством примеров использования "strtok", которые можно найти в Интернете, найти решение не составит большой проблемы., @Michel Keijzers