分享freerots SDK中 更改Numer控件为浮点数的方法-Arduino中文社区 - Powered by Discuz! Archiver

Ding3417 发表于 2020-10-18 10:44

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

本帖最后由 Ding3417 于 2020-10-18 10:47 编辑

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


更改方法:
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同时传给value 的数据也更改为double类型之后,一系列的数据后,pvalue里的数据就变成了:{"val":4.1723},"num-curt":{"val":72.136}}
页: [1]
查看完整版本: 分享freerots SDK中 更改Numer控件为浮点数的方法