I'm currently using google geolocation to get location data to one nodemcu and sending it through serial to another Arduino.The serial command I'm getting right now is,
1.450187T103.824745I'm using the following code to parse it.
if (Serial.available()) { char c = Serial.read(); //gets one byte from serial buffer //if (c == '\n') { //looks for end of data packet marker if (c == '\n') { // Serial.println(readString); //prints string to serial port out //do stuff substring = readString.substring(0,8); lati = substring; loc = readString.indexOf("T"); substring = readString.substring(loc+1, loc+11); longi = substring; readString=""; //clears variable for new input substring=""; } else { readString += c; //makes the string readString } }It works most of the time but sometimes I get 'T' inside the string as well.like this
lat=1.450146&longi=102464T103What's wrong in my code?
- what is the reason for transmitting the
H? ... you only need theTto separate the two valuesjsotola– jsotola2019-06-23 06:54:09 +00:00CommentedJun 23, 2019 at 6:54 - Can you show us the actual serial String, that you received in that case?chrisl– chrisl2019-06-23 09:17:09 +00:00CommentedJun 23, 2019 at 9:17
1 Answer1
with readBytesUntil and C string
if (Serial.available()) { char buff[32]; int l = Serial.readBytesUntil('\n', buff, sizeof(buff)); if (l > 0 && buff[l - 1] == '\r') { l--; // to remove \r if it is there } buff[l] = 0; // terminate the string char* p = strchr(buff,'T'); // returns pointer in string if (p != NULL) { *p = 0; // write 0 as char at pointer to terminate the first part p++; // move the pointer to next char Serial.println(buff); Serial.println(p); } else { Serial.println(buff); }}Explore related questions
See similar questions with these tags.

