I got to have this string in some varible inside the Arduino ---> >REV001626474042+1101932-0748513100000012;ID=sys<
I want to modify this string, so...I've tried with :
What I want to do is modify the String (this one >REV001626474042+1101932-0748513100000012;ID=sys<) to obtain this:
+1101932-0748513100000012
My code is this, but I dont know why doesnt work
String frame, newFrame;
void setup()
{
Serial.begin(9600);
}
void loop()
{
int indicator = 0;
while (Serial.available())
{
delay(1);
if (Serial.available() >0)
{
char c = Serial.read();
frame += c;
}
indicator = 1;
}
// So far I get the original frame (>REV001626474042+1101932-0748513100000012;ID=sys)
if (indicator != 0 )
{
int a = frame.indexOf('+');
int b = frame.indexOf(';');
for (int i = a; i == b - 1; i++)
{
char x = frame[i];
newFrame += x;
}
//Until here, I get the modyfied frame (+1101932-0748513100000012)...but does't show anything
Serial.println(newFrame);
}
}
This code receive this frame from a GPS >REV001626474042+1101932-0748513100000012;ID=sys<, and remove what is not coordinate, so leave only : +1101932-0748513100000012
Here the code, just in case.
String frame, newFrame;
void setup()
{
Serial.begin(9600);
}
void loop()
{
int indicator = 0;
while (Serial.available())
{
delay(1);
if (Serial.available() >0)
{
char c = Serial.read();
frame += c;
}
indicator = 1;
}
if (indicator != 0 )
{
int a = frame.indexOf('+');
int b = frame.indexOf(';');
for (int i = a; i < b; i++)
{
newFrame += frame[i];
}
Serial.println(newFrame);
}
}
I've realized that I have to erase the "frame" and "newFrame" because otherwise happen this:
+1101932-0748513100000012 //at the first time
+1101932-0748513100000012+1101932-0748513100000012 // at the second time
+1101932-0748513100000012+1101932-0748513100000012+1101932-0748513100000012 // 3..and etc
If somebody knows how to erase a String, please post it here. Meanwhile I am doing this after the "Serial.println(newFrame);".. Is not perfect, but it works..
frame = ' ';
newFrame = ' ';
So I'm getting this effect :
+1101932-0748513100000012 //at the first time
+1101932-0748513100000012 // at the second and etc (whit a space at the beginning)
I hope somebody could tell me how to erase a String...meanwhile I'm doing that..is not perfect but it works for the cause.
The way you are doing it creates a string consisting of a single space (followed by the null terminator), that's not the same as an empty string
Try
frame = '\0';
newFrame = '\0';
or maybe
frame = "";
newFrame = "";
There may also be a way with the String class but I'm not familiar with that class.
Note that with normal C strings (ie an array of chars) this sort of technique doesn't really "erase" the string in the sense that the storage is still used, but it will make the functions think there's nothing there.
With the String class this may cause deallocation of memory which is then reallocated next time you make the strings = to something else, and, depending on how well the alloc libraries are written, this is a potential memory leak waiting to happen. As I said I'm not that familiar with the String class, in general I avoid using it on embedded systems for these reasons.