Separar cadena String por ","

hola chicos, soy un poco nuevo en arduino y quisiera que me guiaras un poco esto, el dispositivo que estoy usando es Heltec Lora32.

Estoy en un proyecto donde envío una ubicación GPS de un dispositivo a otro a través de LoRa y , pero el dispositivo que recibe tiene otro gps, y la idea es calcula la distancia de uno a otro, el problema que presento es como puedo separar los valores que envió por "," para poder hacer el calculo, lo que envió es este código

LoRa.print(gps.location.lat(), 6);
LoRa.print(String (F(",")));
LoRa.print(gps.location.lng(), 6);

y aquí les dejo el código del dispositivo que recibe

gracias;

arduino.png

LoRaReceiver_111.ino (4.21 KB)

Hola y bienvenido al foro.

Te invito a que te leas las NORMAS para que aprendas a postear correctamente imagenes, código, errores, enlaces, etc...

Puedes hacer uso de la funcion indexOf de la clase string que te devuelve la posición en la que encuentra un caracter. Luego usar la funcion substring para obtener las subcadenas que componen el valor. Y por último usar toFloat para convertir la cadena en un número.

Todas las funciones estan en la REFERENCIA de la clase String.

Una la librería Separador.h, ahí colocas el símbolo separador que quieras. Creo que está en github.

Con la cadena String que obtenes como resultado declaras un char Cadenas = NULL;

luego a ese verctor le asignas asi

Cadenas= strtok(CadenaStringGPSCpmpleta, ",");  // takes a list of delimiters

Y en la variable Cadenas tendrias la latitud y longitud correspondientes.
Despues que haces eso para traer uno de los dos, ya sea latitud o longitud haces

Cadenas[n]

Avisa si te sirve, Saludos.

Creo que tu explicación del uso de strtok es muy mala. Vas a crear más confusión que solución:

/* 
 *  EJEMPLO DE USO DE STRTOK
 *  
 *  Separa un String por campos delimitados por un caracter.
 *  
 */

// Campos contiene la cadena formateada, con separador ",".
String campos = "34.3434,12.1212,99.9909";

// s en un puntero auxiar necesario.
char *s;

void setup() {
  // Iniciar el puerto serie.
  Serial.begin(9600);
  // En la primera pasa strtok devuelve el string hasta el primer caracter
  // delimitador.
  // Nota: La función strtok es una función estándar de la librería de 
  //       C++, pero no es un miembro clase de String, por lo que no se
  //       puede usar con objetos String. Hay que utilizar la función
  //       miembro c_str() para poder acceder al puntero de char del
  //       objeto String.
  s = strtok(campos.c_str(), ",");
  // Para encontrar todos hay que seguir llamando a strtok pasando como 
  // parametro NULL en la cadena a buscar, cuando haya hallado todos los
  // campos separados por "," devolverá NULL.
  while (s!=NULL) {
    Serial.println(s);
    s=strtok(NULL, ",");
  }
}

void loop() {

}

castelarijoaquin:
Con la cadena String que obtenes como resultado declaras un char Cadenas = NULL;

eso no es un vector(pointer). Esto es una variable char de tamaño de un byte.

char* Cadenas; es un vector