I use bluetooth (works like serial monitor). Let me say i send a text to my hc-05 (same as sending to serial monitor) My current code is displaying text from serial monitor/HC-05 TO LCD
#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`
now my goal is to just get the a and display in lcd
or
in other words i want to get the value of a b c d in the text that is CSV to list or array and get value for index 1,2,3,4
OR
split string by delimiter
so how can i do it
details-ARUINO UNO
2 Answers 2
Use the strtok
function.
From Geeks for geeks (https://www.geeksforgeeks.org/strtok-strtok_r-functions-c-examples/):
arguments:
- str: The string which is to be split
- delim: The character on the basis of which the split will be done Return value
The function performs one split and returns a pointer to the token split up. A null pointer is returned if the string cannot be split.
-
2Note that to use
strtok()
you would first have to migrate away from usingString
, which is a good thing in any case.Majenko– Majenko2021年04月01日 10:05:15 +00:00Commented Apr 1, 2021 at 10:05 -
but the example is for c++ can you provide the example for Arduinoredoc– redoc2021年04月02日 03:50:42 +00:00Commented Apr 2, 2021 at 3:50
-
@hifitech Even though the Arduino/C++ string can be used, it's not a good idea because of the very low SRAM the Arduino Uno has. I assume with a default function and plenty of examples to be found on internet of using
strtok
it would not be a big problem to find a solution.Michel Keijzers– Michel Keijzers2021年04月02日 07:29:38 +00:00Commented Apr 2, 2021 at 7:29
i searched in stack exchange Arduino but i dint get answer so i posted but when i searched in stack over flow i got link this is my final code
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);
}