查看: 108|回复: 0

[分享] 分享freerots SDK中 更改Numer控件为浮点数的方法

[复制链接]

该用户从未签到

发表于 2020-10-18 10:44 | 显示全部楼层 |阅读模式
本帖最后由 Ding3417 于 2020-10-18 10:47 编辑

现象描述:
在制作无线电压表的时候,需要将设备的数据发送给手机app
手机app添加了numer控件,发现默认收到的数据为:{"num-volt":{"val":"4.1723"},"num-curt":{"val":"72.136"}}
其实是设备端输出的数据就是字符串数据了;
然后导致手机app控件无法解析字符串中的小数,而默认取整数,导致功能不完整;
QQ图片20201018104123.png

更改方法:
1、BlinkerApi.c中的【blinker_number_print 】发现value函数默认上传的数据就带了引号,
变成了字符串,需要更改一下语句实现默认上传 【数据】
--------------------------------------------------------------------------------------------------------
//cJSON *value = cJSON_CreateNumber(config->value);
//cJSON_AddItemToObject(pValue, BLINKER_CMD_VALUE, value);
if (config->value) cJSON_AddStringToObject(pValue, BLINKER_CMD_VALUE, config->value);
--------------------------------------------------------------------------------------
更改为:
--------------------------------------------------------------------------------------------------------
cJSON *value = cJSON_CreateNumber(config->value);
cJSON_AddItemToObject(pValue, BLINKER_CMD_VALUE, value);
//if (config-value) cJSON_AddStringToObject(pValue, BLINKER_CMD_VALUE, config->value);
------------------------------------------------------------------------------------------------------------


另外对应的BlinkerApi.h 文件中【blinker_number_config_t 】定义中需要更改
------------------------------------------------------------------------------------------------------
typedef struct
{
    const char *icon;
    const char *color;
    const char *unit;
    const char *text;
    const char *value;
} blinker_number_config_t;
--------------------------------------------------------------------------------------
更改为:
--------------------------------------------------------------------------------------------------------
typedef struct
{
    const char *icon;
    const char *color;
    const char *unit;
    const char *text;
    //const char *value;   //2020-10-18 shiled
    double value;          //2020-10-18 add
} blinker_number_config_t;
-----------------------------------------------------------------------------------

同时传给value 的数据类型也要更改为 double类型;


更改之后的手机app收到的数据类型为:{"val":4.1723},"num-curt":{"val":72.136}};;另外发现仪表盘控件暂时不支持小数,暂时只能用方块型数字控件;


分析:
BlinkerApi.c中的【blinker_number_print 】中使用了cjson接口格式化数据
cJSON_AddStringToObject(pValue, BLINKER_CMD_VALUE, config->value);  //
这个cJSON_AddStringToObject 是将数据以字符串的形式格式化,BLINKER_CMD_VALUE 作为标题,config->value作为数据,放进pValue中;
然后加上之前定义的结构体里面默认定义了const char* 类型;


----------------然后就出现了之前的现象!


然后启用下面这两个函数,
cJSON *value = cJSON_CreateNumber(config->value);
cJSON_AddItemToObject(pValue, BLINKER_CMD_VALUE, value);

屏蔽cJSON_AddStringToObject(pValue, BLINKER_CMD_VALUE, config->value);
同时更改结构体里面的value类型为double PS:cJSON_CreateNumber 的数据类型为double
QQ截图20201018104038.png
同时传给value 的数据也更改为double类型之后,一系列的数据后,pvalue里的数据就变成了:{"val":4.1723},"num-curt":{"val":72.136}}
QQ截图20201018104723.png

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门推荐

关于使用DHT11库编译错误的补救资源
关于使用DHT11库编译错误
有些小伙伴使用从ArduinoIDE的库管理下载的DHT11库的时候可能会遇到编译错误的问题,
我的ESP8266继电器也不工作
我的ESP8266继电器也不工
代码是下的某音上的爆改车间主任控制灯泡的那一集 #define BLINKER_WIFI #define BLIN
各位大佬还请帮忙一看
各位大佬还请帮忙一看
最近在用Arduino读取一个惯导传感器数据,已经通过USB—TTL在电脑端验证过传感器是可
arduinoUNO 用两个PIN控制一个spi设备(RFID)
arduinoUNO 用两个PIN控制
我已经测试,MRFC522的chipSelectPin 是正常的。当pin为低电平时可以正enable并都读写
Arduino物联网开发实例教程
Arduino物联网开发实例教
[md] **blinker用户交流群 301438087 (仅限github已Star的用户加群)** ## bli
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
快速回复 返回顶部 返回列表