I am trying to use a String to store variables from external sensors. When I receive a new sensor reading, I use the MAC address to search inside the String. If I find it, I then look for my ending delimiter. Find how many characters it is and then do a String.delete().
What I am finding is the entire String gets deleted instead of keeping the old data.
Here is the code
#include <XBee.h>
#include <SoftwareSerial.h>
String storedData;
bool insertCheck = true;
XBee xbee = XBee();
XBeeResponse response = XBeeResponse();
// create reusable response objects for responses we expect to handle
ZBRxResponse rx = ZBRxResponse();
ModemStatusResponse msr = ModemStatusResponse();
void setup() {
// start serial
Serial.begin(9600);
Serial1.begin(9600);
xbee.setSerial(Serial1);
Serial.println("starting up yo!");
}
void loop() {
xbee.readPacket();
if (xbee.getResponse().isAvailable()) {
if (xbee.getResponse().getApiId() == ZB_RX_RESPONSE) {
xbee.getResponse().getZBRxResponse(rx);
if (rx.getOption() == ZB_PACKET_ACKNOWLEDGED) {
} else {
Serial.println("packet not acknowledged");
}
String iDnodeMsb = String(rx.getRemoteAddress64().getMsb(), HEX);
String iDnodeLsb = String(rx.getRemoteAddress64().getLsb(), HEX);
String iDnode;
if (iDnodeMsb.length() <= 6){
iDnode = String("00" + iDnodeMsb + iDnodeLsb);}
else {iDnode = String(iDnodeMsb + iDnodeLsb); }
Serial.println(iDnode);
unsigned int macSearch = storedData.indexOf(iDnode);
if(macSearch > 0 && macSearch < 4294967292){
unsigned int startDelimeter = macSearch - 1 ;
unsigned int endDelimeter = storedData.indexOf(">", macSearch);
Serial.print("Start delimiter is: ");
Serial.println(startDelimiter);
Serial.print("End delimiter is: ");
Serial.println(endDelimiter);
unsigned int toRemove = startDelimiter - endDelimiter ;
storedData.trim();
storedData.remove(startDelimeter, toRemove);
Serial.print("Before reading the Data: ");
Serial.println(storedData);
}
storedData.concat("<" + iDnode);
for (int i = 0; i < rx.getDataLength(); i++) {
Serial.print("payload [");
Serial.print(i, DEC);
Serial.print("] is ");
Serial.println(rx.getData()[i], HEX);
String a = String(rx.getData()[i], HEX);
storedData.concat("." + a);
}
storedData.concat(">");
Serial.print("Ending Data: ");
Serial.println(storedData);
}
} else if (xbee.getResponse().isError()) {
Serial.print("oh no!!! error code:");
Serial.println(xbee.getResponse().getErrorCode());
}
}
And here is my output
0013A20040F7836E
payload [0] is 48
payload [1] is 49
payload [2] is 5D
payload [3] is 5E
payload [4] is 1
payload [5] is 0
payload [6] is 0
payload [7] is 0
payload [8] is 1
payload [9] is 1
Ending Data: <0013A20040F7836E.48.49.5D.5E.1.0.0.0.1.1>
0013A20040F5180C
payload [0] is 51
payload [1] is 43
payload [2] is 0
payload [3] is FE
payload [4] is 0
payload [5] is 0
payload [6] is 0
payload [7] is 0
payload [8] is 1
payload [9] is 1
Ending Data: <0013A20040F7836E.48.49.5D.5E.1.0.0.0.1.1><0013A20040F5180C.51.43.0.FE.0.0.0.0.1.1>
0013A20040F7836E
Start delimiter is: 0
End delimiter is: 41
Before reading the Data:
payload [0] is 48
payload [1] is 49
payload [2] is 5D
payload [3] is 5E
payload [4] is 1
payload [5] is 0
payload [6] is 0
payload [7] is 0
payload [8] is 1
payload [9] is 0
Ending Data: <0013A20040F7836E.48.49.5D.5E.1.0.0.0.1.0>
0013A20040F5180C
payload [0] is 51
payload [1] is 43
payload [2] is 0
payload [3] is FE
payload [4] is 0
payload [5] is 0
payload [6] is 0
payload [7] is 0
payload [8] is 1
payload [9] is 0
Ending Data: <0013A20040F7836E.48.49.5D.5E.1.0.0.0.1.0><0013A20040F5180C.51.43.0.FE.0.0.0.0.1.0>
0013A20040F7836E
Start delimiter is: 0
End delimiter is: 41
Before reading the Data:
payload [0] is 48
payload [1] is 49
payload [2] is 5D
payload [3] is 5E
payload [4] is 1
payload [5] is 0
payload [6] is 0
payload [7] is 0
payload [8] is 1
payload [9] is 1
Ending Data: <0013A20040F7836E.48.49.5D.5E.1.0.0.0.1.1>
:
Any help would be Great. Basically I am trying to have any old sensor data stay there and new sensor data deleted and inserted with new the new data set.