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

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1513|回复: 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

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

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 14:36 , Processed in 0.105466 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表