OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3116|回复: 6

SHT10检测温湿度的问题

[复制链接]

22

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
337
金钱
337
注册时间
2015-4-2
在线时间
57 小时
发表于 2015-8-12 19:01:07 | 显示全部楼层 |阅读模式
5金钱
我用串口打印出的数据能显示小数部分,用USART_SendData();发送出来的就只有整数部分,如1A,1B等,小数部分怎么显示,谁能给提示一下。
Temperatuer(&k,&j); //获取温湿度
printf("temp:%5.1fC humi:%5.1f%%\n",k,j);//打印输出            可以显示26.1,26.3等数据
USART_SendData(USART1,k);//串口发送                                    只能发送出1A,十进制就是26,只有整数部分

最佳答案

查看完整内容[请看2#楼]

如果 x 是 float 型,c 是 char 型,这样就可以把类型转换:c = (char) x; 所谓转换是这样的。例如:float x = 65.1;char c;c = (char) x;这样 c 里存的就是 65,即字符 'A'。 补充回答:还有另外一种“转换”,就是 Arvin 2010-11-06 14:08 </SPAN>所说的,不过不是 float&nb ...
坚持
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

22

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
337
金钱
337
注册时间
2015-4-2
在线时间
57 小时
 楼主| 发表于 2015-8-12 19:01:08 | 显示全部楼层
如果 x 是 float 型,c 是 char 型,这样就可以把类型转换:c = (char) x; 所谓转换是这样的。例如:float x = 65.1;char c;c = (char) x;这样 c 里存的就是 65,即字符 'A'。 补充回答:还有另外一种“转换”,就是 Arvin 2010-11-06 14:08 </SPAN>所说的,不过不是 float 型转换成 char 型,而是把 float 型的数字转换成为“字符型数组”的表达方式。这种转换最简单的方法就是借用 <stdio.h> 里的 sprintf 函数,把实数打印到数组里。</p>例如:float x = 65.1;char a[20];sprintf(a, "%g", x);这样子,数组 a 里就会保存字符串 "65.1",即 a[0] = '6'; a[1] = '5'; a[2] = '.'; a[3] = '1'; a[4] = '\0'; 不知道楼主要的,是哪一种转换。请选择满意的答案采纳。如有疑问,欢迎追问。
坚持
回复

使用道具 举报

22

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
337
金钱
337
注册时间
2015-4-2
在线时间
57 小时
 楼主| 发表于 2015-8-12 19:07:37 | 显示全部楼层
是不是ASCII转换
坚持
回复

使用道具 举报

22

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
337
金钱
337
注册时间
2015-4-2
在线时间
57 小时
 楼主| 发表于 2015-8-12 19:12:02 | 显示全部楼层
回复【2楼】51951443:
---------------------------------
怎么才能让USART_SendData()也能发送出温湿度的全部,包括小数部分
坚持
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-8-12 19:55:35 | 显示全部楼层
回复【3楼】51951443:
---------------------------------
分多次发送
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

22

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
337
金钱
337
注册时间
2015-4-2
在线时间
57 小时
 楼主| 发表于 2015-8-12 19:58:40 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
void  Temperatuer(float *wendu,float *shidu)
{
    unsigned char w = 0;
value humi_val,temp_val;
    unsigned char checksum;

    s_transstart(); 
        
   delay_ms(20);     //??0.2s 
    w += s_measure((unsigned char*) &humi_val.i,&checksum,1);  //measure humidity 
    w += s_measure((unsigned char*) &temp_val.i,&checksum,0);  //measure temperature 
    if( w != 0 )  
 {
 s_transstart();                        //in case of an error: connection start 
     }
else 
     {
 humi_val.f=(float)humi_val.i;                   //converts integer to float
     temp_val.f=(float)temp_val.i;                   //converts integer to float
     calc_sth11(&humi_val.f,&temp_val.f);            //calculate humidity, temperature
     } 
    *wendu=temp_val.f;
*shidu=humi_val.f;          
    


通过这个函数直接计算出来的,怎么才能分多次进行发送?
坚持
回复

使用道具 举报

22

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
337
金钱
337
注册时间
2015-4-2
在线时间
57 小时
 楼主| 发表于 2015-8-12 21:23:09 | 显示全部楼层
如果 x 是 float 型,c 是
坚持
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-10 23:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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