Получить конкретный элемент из текста, разделенного запятыми
Я использую 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
@hifi tech, 👍0
2 ответа
Лучший ответ:
я искал в 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);
}
Используйте функцию strtok
.
От вундеркиндов к вундеркиндам (https://www.geeksforgeeks.org/strtok-strtok_r-functions-c-examples/):
аргументы:
- str: Строка, которая должна быть разделена
- delim: Символ, на основе которого будет сделано разделение Возвращаемого значения
Функция выполняет одно разделение и возвращает указатель на разделенный токен. Нулевой указатель возвращается, если строка не может быть разделена.
- Очень простая операция Arduino Uno Serial.readString()
- Как преобразовать строку в массив байтов
- Как отправить строку с подчиненного устройства Arduino с помощью SPI?
- Понимание того, почему следует избегать «String» и альтернативных решений
- Arduino: как записать значение переменной в текстовый файл и изменить его на SD-карте?
- Буфер char в String в Arduino UNO
- Сохранить начальный ноль HEX в строку RFID RC522 Arduino
- Разделение Serial.readString на массив строк
Обратите внимание, что для использования
strtok()
вам сначала придется отказаться от использованияString
, что в любом случае хорошо., @Majenkoно пример для c++ можете ли вы привести пример для Arduino, @hifi tech
@hifitech Несмотря на то, что строку Arduino/C++ можно использовать, это не очень хорошая идея из-за очень низкого уровня SRAM, который есть у Arduino Uno. Я предполагаю, что с функцией по умолчанию и множеством примеров использования "strtok", которые можно найти в Интернете, найти решение не составит большой проблемы., @Michel Keijzers