muchas gracias, pero el codigo sigue sin funcionar, es decir entra perfectament en el arduino pero no lo procesa corectamente:
Des del arduino 1, envio todo esto:
Serial3.print("_");
Serial3.print(robot);
Serial3.print(",");
Serial3.print(state);
Serial3.print(",");
Serial3.print("v0");
Serial3.print(",");
Serial3.print(enviar_configuracio_s3);
Serial3.print(",");
//BOTONES ( 1 = on 0 = off)
Serial3.print(bt_1a);
Serial3.print(",");
Serial3.print(bt_1b);
Serial3.print(",");
Serial3.print(bt_2a);
Serial3.print(",");
Serial3.print(bt_2b);
Serial3.print(",");
Serial3.print(bt_3a);
Serial3.print(",");
Serial3.print(bt_3b);
Serial3.print(",");
Serial3.print(bt_4a);
Serial3.print(",");
Serial3.print(bt_4b);
Serial3.print(",");
Serial3.print(bt_5a);
Serial3.print(",");
Serial3.print(bt_5b);
Serial3.print(",");
Serial3.print(bt_6a);
Serial3.print(",");
Serial3.print(bt_6b);
Serial3.print(",");
//x i y de joysticks (hasta 4 numeros cada variable)
Serial3.print(j_x1);
Serial3.print(",");
Serial3.print(j_y1);
Serial3.print(",");
Serial3.print(j_x2);
Serial3.print(",");
Serial3.print(j_y2);
Serial3.print(",");
Serial3.print(j_x3);
Serial3.print(",");
Serial3.print(j_y3);
Serial3.print(",");
Serial3.print(j_x4);
Serial3.print(",");
Serial3.print(j_y4);
Serial3.print(",");
Serial3.print(j_x5);
Serial3.print(",");
Serial3.print(j_y5);
Serial3.print(",");
Serial3.print(j_x6);
Serial3.print(",");
Serial3.print(j_y6);
Serial3.print(",");
Serial3.print(j_x7);
Serial3.print(",");
Serial3.print(j_y7);
Serial3.print(",");
//botones (1= on 0=off
Serial3.print(jb_1);
Serial3.print(",");
Serial3.print(jb_2);
Serial3.print(",");
Serial3.print(jb_3);
Serial3.print(",");
Serial3.print(jb_4);
Serial3.print(",");
Serial3.print(jb_5);
Serial3.print(",");
Serial3.print(jb_6);
Serial3.print(",");
Serial3.print(jb_7);
Serial3.println(".");
Las primeras variables que envio son de botones, 0 o 1, las segundas son de joysticks, que pueden enviar hasta 4 xifas cada variable (de 0 a 1023), i finalmente otra vez botones (0 o 1);
El codigo que me enviaste (MUUCHAS GRAACIAS!), lo he probado, pero no me convierte correctamente, de string a char*.
Segundo arduino:
#define MAX_ARGS 70
#define MAX_CADENA 90
void setup()
{
Serial.begin(57600);
Serial3.begin(57600);
}
void loop() {
String string1 = Serial3.readStringUntil('.'); // poner el delimitador que gustes
char * charBuf;
char args[MAX_ARGS][MAX_CADENA]; // Para extrae_argumentos
char strbuf[15];
string1.toCharArray(charBuf, 600);
int num_palabras = extrae_argumentos(charBuf, ".", args, MAX_ARGS);
Serial.print(charBuf[1]);
int i;
if (num_palabras>MAX_ARGS) {
printf ("Se han devuelto más palabras del máximo\n");
num_palabras=MAX_ARGS;
}
sprintf(strbuf, "CADENA: %s\n", charBuf);
Serial.print(strbuf);
for (i=0; i<num_palabras; i++) {
sprintf(strbuf, "Palabra %d: \"%s\"\n", i, args[i]);
Serial.print(strbuf);
}
}
//Extraer
int extrae_argumentos(char *orig, char *delim, char args[][MAX_CADENA], int max_args)
{
char *tmp;
int num=0;
/* Reservamos memoria para copiar la candena ... pero la memoria justa */
char *str = (char *) malloc(strlen(orig)+1);
strcpy(str, orig);
/* Extraemos la primera palabra */
tmp=strtok(str, delim);
do
{
if (num==max_args)
return max_args+1; /* Si hemos extraído más cadenas que palabras devolvemos */
/* El número de palabras máximo y salimos */
strcpy(args[num], tmp); /* Copiamos la palabra actual en el array */
num++;
/* Extraemos la siguiente palabra */
tmp=strtok(NULL, delim);
} while (tmp!=NULL);
return num;
}
He estado rumiando mucho este codigo, pero no veo porque no me extrae la string, y porque no la convierte. Para probarlo he puesto varias chuletas al medio, y he visto que no me la convierte de String a Char*.
Muchas gracias, si alguien me pudiese ayudar..!