chr*_*ero 7 c c++ serial-port bytearray arduino
什么是派出最好的方式float,double以及int16通过串行上的Arduino?
的Serial.print(),因为只有发送值ASCII编码.但我想将值作为字节发送.Serial.write()接受字节和字节数组,但是将值转换为字节的最佳方法是什么?
我试着投了int16一个byte*,没有运气.我也使用了memcpy,但它使用了很多CPU周期.Arduino使用普通的C/C++.这是一款ATmega328微控制器.
Nil*_*nck 10
HM.这个怎么样:
void send_float (float arg)
{
// get access to the float as a byte-array:
byte * data = (byte *) &arg;
// write the data to the serial
Serial.write (data, sizeof (arg));
}
Run Code Online (Sandbox Code Playgroud)
是的,要发送这些数字,您必须先将它们转换为ASCII字符串.如果您正在使用C,那么sprintf()IMO是进行此转换的最便捷方式:
[后来添加:AAAGHH!我忘了for ints/ longs,函数的输入参数想要无符号.同样,传递给的格式字符串sprintf().所以我在下面改了.对于我可怕的疏忽感到抱歉,这本来是一个难以发现的错误.而且,ulong使它更通用.]
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;
}
Run Code Online (Sandbox Code Playgroud)
和花车和双打类似.执行转换的代码已事先知道.必须告诉它 - 它正在转换什么样的实体,所以你可能最终得到功能char *float2str( float float_num)和char *dbl2str( double dblnum).
您将从转换中获得NUL终止的左调整(无前导空格或零)字符串.
你可以随时随地进行转换; 这些功能只是插图.