找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2598|回复: 5
收起左侧

SHT10传感器读取数据不成功 最高位乱码

[复制链接]
回帖奖励 15 黑币 回复本帖可获得 5 黑币奖励! 每人限 1 次(中奖概率 50%)
ID:265988 发表于 2018-2-12 22:59 | 显示全部楼层 |阅读模式
void tmep_RH_get()
{
        value humi_val,temp_val;             //定义两个共同体 温湿度·
        unsigned char error;                 //用于检测是否出错
        unsigned char checksum;                    //CRC                    
        RESET_TX();                            //启动连接复位·
        error=0;                                 //没有·错误
        error+=MEASURE_T_RH((unsigned char*)&temp_val.i,&checksum,TEMP); //测量温度
        error+=MEASURE_T_RH((unsigned char*)&humi_val.i,&checksum,HUMI); //测量湿度
        if(error!=0) RESET_TX();                     //发生错误则复位
        else
        {
                humi_val.f=(float)humi_val.i;                   //转换为浮点数
                temp_val.f=(float)temp_val.i;                  
                calc(&humi_val.f,&temp_val.f);            //修正温湿度
                temp=temp_val.f*10;
                humi=humi_val.f*10;
                TEMP1[0]=temp/1000;
                TEMP1[1]=temp%1000/100;
                TEMP1[2]=temp%100/10;
                TEMP1[3]=temp%10;               
                RH[0]=humi/1000;
                RH[1]=humi%1000/100;
                RH[2]=humi%100/10;
                RH[3]=humi%10;               
        }
}

回复

使用道具 举报

ID:285001 发表于 2018-2-24 17:55 | 显示全部楼层
最高位乱码是什么意思?一个bit,非零即一啊。
如果你说的是 TEMP1[0]或RH[0],从代码上是没有问题的,你要确认temp和humi的值是否正确,
可能性更大的是存在数组越界操作了TEMP1[0]/RH[0]。你可以从TEMP[1]开始存数据看看情况。
回复

使用道具 举报

ID:285675 发表于 2018-2-26 15:15 | 显示全部楼层
你好,现在SHT10今年就要停产了,你这里怎么还用这个产品呢,
回复

使用道具 举报

ID:285675 发表于 2018-2-26 15:16 | 显示全部楼层
SHT10这个产品,今年就要停产了,怎么还选这个呢
回复

使用道具 举报

ID:96023 发表于 2019-12-14 11:03 | 显示全部楼层
MEASURE_T_RH((unsigned char*)&temp_val.i,&checksum,TEMP); 这个原函数处理处理错,返回&temp_val.i为unshigned int 型数据,参考如下程序:
/********************************************************
SHT11温湿度检测
********************************************************/
char s_measure(uint16_t *p_value, uint8_t *p_checksum, uint8_t mode)
{
    unsigned error=0;
    uint8_t value_H = 0;
    uint8_t value_L = 0;
    uint16_t i;
    s_transstart(); //启动传输
    switch(mode)    //选择发送命令
    {
        case TEMP : error+=s_write_byte(MEASURE_TEMP); break; //测量温度
        case HUMI : error+=s_write_byte(MEASURE_HUMI); break; //测量湿度
        default : break;
    }
    DATA_IN();
    for (i=0;i<65535;i++) if(IN_DATA == 0) break; //等待测量结束
    if(IN_DATA) error+=1; // 如果长时间数据线没有拉低,说明测量错误
    value_H = s_read_byte(ACK); //读第一个字节,高字节 (MSB)
    value_L = s_read_byte(ACK); //读第二个字节,低字节 (LSB)
//    *(p_value) = s_read_byte(ACK); //读第一个字节,高字节 (MSB)
//    *(p_value+1) = s_read_byte(ACK); //读第二个字节,低字节 (LSB)
    *p_value = (value_H << 8)| value_L;
    *p_checksum = s_read_byte(noACK); //read CRC校验码
    return error; // error=1 通讯错误
}
回复

使用道具 举报

ID:627214 发表于 2019-12-14 19:58 | 显示全部楼层
试着清零一下看看,或者延时一下
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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