Sorry for the stupid question, but i'm just looking for another set of eyes, perhaps someone can tell me how can i get this going...

String mystring="";
void setup()
{
Serial.begin(9600);
}

void loop()
{
mystring="The ADC value is: " + analogRead(A15);
Serial.println(mystring);
sendlog(mystring);
delay(10000);
}

void sendlog(const char* message)
{
//do whatever to send this to logging SD...
}

while compiling, i get the following: 

error: cannot convert 'String' to 'const char*' for argument '1' to 'void sendlog(const char*)'

I understand, this is an expected error, but how to i fix this? i want to get away from using String object altogether. The sendlog is a part of other library, which i do not want to modify, but looking to fix my code instead... Anyone has any idea? I tried all different option starting from .toCharArray and ending with strcpy and alike to fix this, but it seems, that nothing is being passed to the sendlog in the end. so, i need to append a string of characters with int, and send it to the sendlog as a char*. This must be very simple, and this is one of those, where i do not seem so see a very obvious solution... Help anyone?

--Andy

Views: 3222

Reply to This

Replies to This Discussion

First, if you try to append a non-string value to a string it'll get weird.  Instead of

mystring="The ADC value is: " + analogRead(A15);

you should use

mystring="The ADC value is: " + String(analogRead(A15), DEC);

to append a new String (created from a decimal value) to your existing String.  Note that the original method won't cause a compile error, but what you get over the serial port will likely be garbage.  (What you're doing is adding the value read from the analog port to the memory location of mystring, and it'll pass that to println which will read from that incorrect point until it encounters a null byte.)

Second, you have to break the String object back to an array of chars, and to do that you have to have an array of chars to put it in.  If you know what the length of your string is going to be, or at least some sort of maximum range, it's pretty easy.  We know that your string will only be 23 characters long ("The ADC value is: " = 18, "1023" [the max analogRead() value] = 4, and one extra for the terminating null character), so our array only has to be that big.  If you change the wording you'll have to resize the array.

char otherString[23]; //char array to copy the String into

mystring.toCharArray(otherstring, mystring.length() + 1); //Copy the string (+1 is to hold the terminating null char)

sendlog(otherString); //send our char array copy of the String object to sendlog()

Char arrays don't offer all the flexibility that a String object does, and they're sometimes kind of hard to work with, but they're a lot smaller and faster (they only take up as much space as there are characters).

I hope this helps you out.  You could achieve the same outcome using only a char array, but the String object is so much easier to use, especially for converting a number to a string and appending one string to another.

I keep reading in the Arduino reference that you can use "Constant String" + analogRead(), myString += 123, and similar constructions, but whenever I do I get random-length garbage.  Using the String constructor to concatenate a number to a string works though.  Who knows.

RSS

Latest Activity

Walter Hynson commented on Marcelo Rodrigues's group Arduino
"have you checked the data sheet for the display ,check to find out what pin does what and then make…"
11 hours ago
Walter Hynson joined Marcelo Rodrigues's group
Thumbnail

Arduino

Group for the Arduino communitySee More
11 hours ago
GarageLab posted blog posts
yesterday
Profile IconTodd Jarvis, Raul Palav and William Lathan joined GarageLab (arduino, electronics, robotics, hacking)
yesterday
Profile IconGordon Rain and Ronald E Anderson joined GarageLab (arduino, electronics, robotics, hacking)
Wednesday
GarageLab posted a blog post
Wednesday
Harry Matthie posted a discussion

Garagino JP1

Does anyone know what the JP1 is for on the Garagino?  I found out that the x1 and x2 pins are for…See More
Tuesday
GarageLab posted a blog post
Monday
Profile IconManikandan and k joined GarageLab (arduino, electronics, robotics, hacking)
Monday
GarageLab posted a blog post
Apr 17
Donnie Rose replied to Donnie Rose's discussion Building an auto-boat to keep ducks out of the pool!
"Correction, sorry.  RC receiver is not used with this set up.   Battery & motor hooks…"
Apr 16
Donnie Rose posted a discussion
Apr 16
Profile IconDonnie Rose and Ransona Company joined GarageLab (arduino, electronics, robotics, hacking)
Apr 16
GarageLab posted a blog post
Apr 16
Jim Kelley commented on GarageLab's blog post HemaVision Smart Thermal Imager Actually Tells You What that Cool (or Hot) Image Means
"This could be a valuable tool for diagnosing temperature and humidity problems in locations where…"
Apr 15
Anthony Parker updated their profile
Apr 14
David Braithwaite added a discussion to the group Raspberry Pi
Apr 14
David Braithwaite joined David's group
Thumbnail

Raspberry Pi

This is a place to discuss all things Raspberry Pi.See More
Apr 14
GarageLab posted a blog post

Artificial bee brain used for vision system of a drone

The Green Brain Project is located in Sheffield, England, and it has one key focus: to simulate a…See More
Apr 14
Profile Iconabraham chemweno, Hetcher, Dan Calef and 1 more joined GarageLab (arduino, electronics, robotics, hacking)
Apr 14

© 2015   Created by Marcelo Rodrigues.

Badges  |  Report an Issue  |  Terms of Service