在任何其他C / C ++平台中,当您要使用printf
或其同级元素打印(或转换为字符串)浮点数时,可以将“%f”用作格式说明符。任何,除了在Arduino中。
要转换浮点,您需要使用dtostrf()
,
char * dtostrf( double __val, signed char __width, unsigned char __prec, char * __s)
dtostrf()函数将在val中传递的双精度值转换为ASCII表示形式,并将其存储在s下。调用方负责提供足够的存储空间。
转换以“ [-] d.ddd”格式进行。输出字符串的最小字段宽度(包括可能的“。”和可能的负值符号)以宽度给出,prec确定小数点后的位数。宽度是带符号的值,向左调整为负。
dtostrf()函数将指针返回转换后的字符串s。
要将字节(或任何非浮点数)转换为ascii,请使用 snprintf()
int snprintf ( char * s, size_t n, const char * format, ... );
将格式化的输出写入大小已设置的缓冲区。
如果在printf上使用了format,则使用与要打印的文本相同的字符串组成一个字符串,但是内容将作为C字符串存储在由s指向的缓冲区中(而不是被打印)(将n作为要填充的最大缓冲区容量)。
您可以自己阅读详细信息,但这是一个演示。
这个想法是产生buffer
一个传统的C风格的字符串(空终止)。您可以打印或传输的字符串。
浮点值分两步打印。首先,我们dtostrf
将浮点值转换为他的ascii表示形式。然后,我们snprintf
将该值(作为字符串)包含在整行中,然后打印出来。
void setup() { Serial.begin(9600); while(!Serial); Serial.println("Start"); float value = 123.45; byte balue = 128; char buffer[80]; char fValue[16]; dtostrf(value, 3, 2, fValue); snprintf(buffer, sizeof(buffer), "float %s", fValue); Serial.println(buffer); snprintf(buffer, sizeof(buffer), "byte value is %d", (int) balue); Serial.println(buffer); } void loop() { }