How to send float over serial

前端 未结 9 1909
Happy的楠姐
Happy的楠姐 2021-01-02 09:15

What\'s the best way to send float, double, and int16 over serial on Arduino?

The Serial.print() only sends val

9条回答
  •  爱一瞬间的悲伤
    2021-01-02 10:07

    Yes, to send these numbers you have to first convert them to ASCII strings. If you are working with C, sprintf() is, IMO, the handiest way to do this conversion:

    [Added later: AAAGHH! I forgot that for ints/longs, the function's input argument wants to be unsigned. Likewise for the format string handed to sprintf(). So I changed it below. Sorry about my terrible oversight, which would have been a hard-to-find bug. Also, ulong makes it a little more general.]

    char *
    int2str( unsigned long num ) {
        static char retnum[21];       // Enough for 20 digits plus NUL from a 64-bit uint.
        sprintf( retnum, "%ul", num );
        return retnum;
    }
    

    And similar for floats and doubles. The code doing the conversion has be known in advance. It has to be told - what kind of an entity it's converting, so you might end up with functions char *float2str( float float_num) and char *dbl2str( double dblnum).

    You'll get a NUL-terminated left-adjusted (no leading blanks or zeroes) character string out of the conversion.

    You can do the conversion anywhere/anyhow you like; these functions are just illustrations.

提交回复
热议问题