How Can I merge char variable

Good evening all,

I need to merge some char into a another.

Here are my declaration

char coords[100];
char lon[15];
char lat[15];
char alt[15];
char time[20];
char vel[15];

At the end, I would like to have this

coords = "lat="+lat+"&long="+lon+"&alt="+alt+"&speed=&course="+val+"&date=2013-04-25&time="+time+";

By the way, the time is returning with in this format

20130615220230.000

How can I get it a human readable?

Cheers

strcat?

I am not sure, if it works

this return me only the time value

strcpy (coords,"lat=");
      strcpy (coords,lat);
      strcpy (coords,"&long=");
      strcpy (coords,lon);
      strcpy (coords,"&alt=");
      strcpy (coords,alt);
      strcpy (coords,"&speed=");
      strcpy (coords,"");
      strcpy (coords,"&course=");
      strcpy (coords,vel);
      strcpy (coords,"&date=");
      strcpy (coords,"2013-06-16");
      strcpy (coords,"&time=");
      strcpy (coords,time);

Serial.println(coords);

try this:

char coords[50];

snprintf(coords,50,"lat=%s&long=%s&alt=%s&speed=%s&course=%s&date=%s&time=%s",lat,lon,alt,speed,vel,date,time);

edit: variable name

Or, use the String class with operator+, such as

String message = String(“lat”) + String(lat) …and so on

Si when I uncomment this

char coords[100];
//snprintf(coords,100,"lat=%s&long=%s&alt=%s&speed=%s&course=%s&date=%s&time=%s",lat,lon,alt,"",vel,"2013-06-22",time);

the program free. So stop at the begining

pierrot10:
the program free. So stop at the begining

What?

The terminal show the progress but it stop at the 5ft line. Nothing happen. When I comment the line, the code/terminal continue in his right process

pierrot10:
The terminal show the progress but it stop at the 5ft line. Nothing happen. When I comment the line, the code/terminal continue in his right process

What terminal? What 5ft. line?

This is when is commented

----------------------
Starting SIM908.
----------------------
Please wait...
DB:ELSE
DB:ELSE
DB:ELSE
DB:CORRECT BR
Turn on

status=READY

Attaching GSM
--------------
DB:ALREADY HAVE AN IP
status=ATTACHED
GSM RAEDY TO GO!

Attaching GPS
--------------
status=GPS READY TO GO!
sms => Send SMS
data => Send data to the server
get => Get data from server
gps => Get GPS coords
test => Test system

This is when it uncommented (not good)

----------------------
Starting SIM908.
----------------------
Please wait...
DB:ELSE
DB:ELSE
DB:ELSE
DB:CORRECT BR

To resume,
I have this

gps.getPar(lon,lat,alt,time,vel);

and it should be in the coords variable of this

inet.httpPOST(host, port_post, path_post, coords , "Result", 1000);

But I hav to add URL varaiable like this

coords = "lat="+lat+"&long="+lon+"&alt="+alt+"&speed=&course="+val+"&date=2013-04-25&time="+time+";

:relaxed: :slight_smile:

And how are we supposed to know what's wrong when you've only posted no more than 4 lines of your code?

pierrot10:
Si when I uncomment this

char coords[100];

//snprintf(coords,100,"lat=%s&long=%s&alt=%s&speed=%s&course=%s&date=%s&time=%s",lat,lon,alt,"",vel,"2013-06-22",time);



the program free. So stop at the begining

"" is invalid, use a variable. Here, I've done the work for you.

void setup()
{
  char coords[100];
  char lon[15];
  char lat[15];
  char alt[15];
  char vel[15]; // speed
  char crs[15]; // course
  char date[20];  
  char time[20];
  
    // make sure each variable is initialized or sprintf will return junk
    strcpy(lat,"99.9");
    strcpy(lon,"11.1");
    strcpy(alt,"22");
    strcpy(vel,"55mph");
    strcpy(crs,"2.5NE");
    strcpy(time,"21:01:01");
    strcpy(date,"6/15/2013");
    snprintf(coords,100,"lat=%s&long=%s&alt=%s&speed=%s&course=%s&date=%s&time=%s",lat,lon,alt,vel,crs,date,time);
    
    Serial.begin(9600);
    Serial.println(coords);
    Serial.end();
}

void loop() {}

Hello All
thank for your answers and help, but I am afraid it did not solve my issue.

I am sorry if I have been not clear enough.

Here is a resume

// GPS
char coords[100];
char lon[15];
char lat[15];
char alt[15];
char time[20];
char vel[15];
char msg1[5];
char msg2[5];

This collect the GPS coords

gps.getPar(lon,lat,alt,time,vel);

Then from now, I have the longitude (lon) the latitude (lat) etc. No worries for sppeed and course, I will see it later.

I have to send the cords to a remote server and for this I use this function

 inet.httpPOST(host, port_post, path_post, coords , "Result", 1000);
      delay(10000);

Coords is the char variable which must contain the value.

If I code

coords = "lat="+lat+"&long="+lon+"&alt="+alt+"&vel="+val+"&time="+time;
inet.httpPOST(host, port_post, path_post, coords , "Result", 1000);

This works fine, but now I have to replace the “10.000”, “20.000” etc by the value provided by the GSP.
So I tryied this

coords = "lat="+lat+"&long=20.0000&alt=30.000&speed=&vel=40.000&time=20130609062400.097;

but this does not work.
I have this error message

Invalid operands of types ‘const char[5]’ and ‘char[15]’ to binary ‘operator’ +

That’s it
:slight_smile:

Ok, I solved my problem this way

  gps.getPar(lon,lat,alt,time,vel);
      
      strcpy (coords,"lat=");
      strcat (coords,lat);
      
      strcat (coords,"&long=");
      strcat (coords,lon);
      
      strcat (coords,"&alt=");
      strcat (coords,alt);
      
      strcat (coords,"&vel=");
      strcat (coords,vel);
      
      strcat (coords,"&time=");
      strcat (coords,time);

Now I have a last question.

time diaply this : 20130609062400.097

how can I have it in a readable format?

many thank

You could try something like this:

strcat (coords,"&yr=");
strncat(coords,time,4); //first 4 chars are year
strcat(coords,"&mon=");
strncat(coords,time+4,2); //next 2 are month
strcat(coords,"&day=");
strncat(coords,time+6,2); //next 2 are day
strcat(coords,"&hr=");
strncat(coords,time+8,2); //next 2 are hour
strcat(coords,"&min=");
strncat(coords,time+10,2); //next 2 are minute
strcat(coords,"&sec=");
strcat(coords,time+12); //remainder is seconds

But there ought to be a better way of doing this. Perhaps if you actually posted your code, then one could be suggested.

Part of the trouble you are having is that your coords[100] buffer is not large enough to store the entire concatenated string. Count how long the string is, trust me, its more than 100 characters.

time diaply this : 20130609062400.097

how can I have it in a readable format?

How can you have what in a readable format on what?

You might have better luck with your snippets at http://snippets-r-use.com. Here, we expect (and need) to see ALL of your code. It is possible that you are running out of memory.

Dear Tom Carpenter and Paul

Thank for your answer. Tom I am going to try your proposition and I count the amout of caracters but apparently it should be fine, because here are declare the char variable

char coords[100];
char lon[15];
char lat[15];
char alt[15];
char time[20];
char vel[15];
char msg1[5];
char msg2[5];

@Paul
When I publish that post, I have not niticed the here that number 20130609062400.097
there is year, month etc.
So at the final, I would like to have this in that formatz

2013-06-09 06:24:00

So to be sincerly, I do not know what it's exacetly this 062400.097. I supposed it's the time, but I do not think that at 6am, I was working.... :~

but in order to make sure, I ma going to increate coords to 150

So to be sincerly, I do not know what it's exacetly this 062400.097. I supposed it's the time, but I do not think that at 6am, I was working....

It looks like the time as you surmised, with a decimal component to the seconds. As to it not being the time of day you expect, does it make sense if it were Zulu time (GMT) ?

Still with the snippets, eh? When you post ALL of your code, we can help.