在任何其他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() { }
