2

Convert text array/buffer to integer and string.

hi! i'm sending text to an arduino and the output of that library is a uint8_t array.

Atm the text send is a number between "0" and "1023"

void something(uint8_t * text){
 analogWrite(13,text);// does not work
}
/*
toInt() also not
int() not
atoi() not
invalid conversion from 'uint8_t* {aka unasigned char*}' to 'const char*'
*/

i need to convert it to an integer or better to a uint16_t.

As i plan to send custom commands in near future it would also be good to know how to convert that array to a string, that i then split/manipulate/parse.. whatever.

i looked in various posts but i couldn't get it to work on that simple example above. i'm new to c++

if it's needed the length is also aviable inside the function.

3

Your problem is that you are storing your text in an unsigned pointer (uint8_t *)instead of a signed pointer (char *).

If you change all your text types to char * then you can directly use atoi(). If you have a lot to change, though, you can just cast the unsigned pointer into a signed one (and make it const at the same time):

analogWrite(13, atoi((const char *)text));
  • its from a websocket lib... i would need to rewriter the whole lib...anyway this worked perfectly – cocco Nov 15 '15 at 13:20
  • btw i will update this analogwrite at 60Hz . is "cast" slow/are there faster ways to convert the buffer to a string or int? – cocco Nov 15 '15 at 13:35
  • @cocco Cast makes no difference at runtime, only compile time. There are faster ways to convert than atoi, but they aren't as safe - i.e., they don't do any bounds checking. – Majenko Nov 15 '15 at 13:36
  • it works but i have a bigger problem now. it crashes really fast. i can't send data faster than 2 times per second. maybe you know more about this.arduino.stackexchange.com/questions/17811/esp8266-websockets – cocco Nov 16 '15 at 10:25
0

analogWrite is a function to set a PWM duty cycle value to a pin on the micro

Usually to control a motor speed or LED brightness or similar.

Unless you plan to use the char value to set the PWM value??

A bit more context would help with your problem.

  • i control a led with websockets. now it works. @Majenko answered it correctly – cocco Nov 15 '15 at 13:28
  • This isn't really an answer. – Chris Stratton Oct 31 '16 at 23:03
-1

I've converted first four bytes to string, and then to int :

void something(uint8_t * payload){
String str="";
char c;
for(int i=0;i<4;i++)
    if (isDigit(c=(char)(*(payload+i))))
        str += c;

int Val =str.toInt();
Val=Val>1023?1023:Val;

analogWrite(14,Val);
}
  • This is a very inefficient approach. – Chris Stratton Oct 31 '16 at 23:03

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.