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: 8225

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

Profile Icontarun patel, Enrique S. Perez Rodriguez, K Fiore and 5 more joined GarageLab (arduino, electronics, robotics, hacking)
8 hours ago
Marcelo Rodrigues replied to Peter Davies's discussion Anyone got stock of Garagelabs automation board
"Peter, You can buy them on…"
9 hours ago
Rob Lambert joined Marcelo Rodrigues's group
Thumbnail

Arduino

Group for the Arduino communitySee More
Saturday
Sardar Tamoor commented on Thulana Vimukthi's blog post GPS GUIDED AUTONOMOUS ROBOT
"can you plz help me on my project !!! its basically obstacle avoidance in dynamic environment and…"
Wednesday
Sardar Tamoor commented on Thulana Vimukthi's blog post GPS GUIDED AUTONOMOUS ROBOT
"can you plz help me on my project !!! its basically obstacle avoidance in dynamic environment and…"
Wednesday
Sardar Tamoor is now a member of GarageLab (arduino, electronics, robotics, hacking)
Apr 26
Peter Davies posted a discussion

Anyone got stock of Garagelabs automation board

HiI have a requirement for 11 automation boards and have been able to source 8,  does anyone have a…See More
Apr 25
Profile IconGuilherme Barros, Rob Lambert and kevin parr joined GarageLab (arduino, electronics, robotics, hacking)
Apr 22
Tino Pascuzzi left a comment for stephen smith
"Hello, my name is Tino Pascuzzi and I'm the owner of The Sanctuary Haunted Attraction.  I…"
Apr 14
Tino Pascuzzi left a comment for Aaron Thiedt
"Hello, my name is Tino Pascuzzi and I'm the owner of The Sanctuary Haunted Attraction.  I…"
Apr 14
Tino Pascuzzi left a comment for Paul Ellison
"Hello, my name is Tino Pascuzzi and I'm the owner of The Sanctuary Haunted Attraction.  I…"
Apr 14
Tino Pascuzzi left a comment for Gary
"Hello, my name is Tino Pascuzzi and I'm the owner of The Sanctuary Haunted Attraction.  I…"
Apr 14
Tino Pascuzzi left a comment for Amauri
"Hello, my name is Tino Pascuzzi and I'm the owner of The Sanctuary Haunted Attraction.  I…"
Apr 14
Mark Mendelsihn is now a member of GarageLab (arduino, electronics, robotics, hacking)
Apr 14
Tino Pascuzzi updated their profile
Apr 13
ade ljathanna is now a member of GarageLab (arduino, electronics, robotics, hacking)
Apr 12
Marcelo Rodrigues commented on Steve Brune's blog post Toaster Oven Computer Modification
"lol... Cool! Congrats, Steve."
Apr 11
Steve Brune posted a blog post

Toaster Oven Computer Modification

A while back I built a Mini-Itx computer in a toaster oven. I posted it on my website here:…See More
Apr 11
Profile Iconchris yang and Hendra joined GarageLab (arduino, electronics, robotics, hacking)
Apr 11
kulvir saini is now a member of GarageLab (arduino, electronics, robotics, hacking)
Apr 8

© 2016   Created by Marcelo Rodrigues.   Powered by

Badges  |  Report an Issue  |  Terms of Service