Arduino用sscanf读取浮点数

use*_*030 0 c++ arduino arduino-c++

我正在尝试使用sscanf()读取数字,但我无法使用double vars成功但可以读取int

双重的例子

//double var reading not working 
    const char KBuffer[80] = "0x3:2.1:2.1:2.1";

    int rt;
    double p,i,d;
    int n = sscanf(KBuffer, "%x:%lf:%lf:%lf", &rt, &p, &i, &d);

    Serial.println();
    Serial.print("rt "); Serial.print(rt);
    Serial.print(" P ");Serial.print(p);
    Serial.print(" i ");Serial.print(i);
    Serial.print(" d ");Serial.print(d);
Run Code Online (Sandbox Code Playgroud)

//输出rt 3 P 0.00 i ovf d 0.00

int的例子

// int reading working ok
    const char KBuffer[80] = "0x3:2:2:2";

    int rt;
    int p,i,d;
    int n = sscanf(KBuffer, "%x:%d:%d:%d", &rt, &p, &i, &d);

    Serial.println();
    Serial.print("rt "); Serial.print(rt);
    Serial.print(" P ");Serial.print(p);
    Serial.print(" i ");Serial.print(i);
    Serial.print(" d ");Serial.print(d);
 // output
rt 3 P 2 i 2 i 2 
Run Code Online (Sandbox Code Playgroud)

所以任何想法在做什么错

当我在C ++在线编译器上运行时使用相同的代码,例如:https : //onlinegdb.com/ryS8zfE3r

得到正确的结果

P__*_*J__ 5

即使第一个转换顺利进行,arduino scanf也不会读取浮点数,而printf也不会同时打印它们。scanf和printf系列功能默认情况下不支持浮点数。

第一个问题很容易解决:int n = sscanf(KBuffer, "0x%x:%d:%d:%d", &rt, &p, &i, &d);第二个问题需要通过添加来更改编译器(或链接器)操作,-Wl,-u,vfscanf -lscanf_flt -lm 但是irt 会使图像大小增加约15kb。

hardware/tools/avr/doc/avr-libc/group__avr__stdio.html在您的电路板库的安装目录中阅读更多内容