Temperature = - (buf[2] + ( buf[3] & 0x7F )/10 ) ;
DHT11检测温度为负时未判断


问题描述

提示:这里描述项目中遇到的问题:

由于日常调试过程中没有遇到过零下温度,因此未重视,后进行低温实现发现该问题,遂解决。

/**函数名称:()*输入参数:*返回参数:*函数功能://获取核心板DHT11温湿度;*函数说明:*备    注:20191219-ZCJDHT11 -20-55DS18B20 -55℃~+125℃*           20200303更新 增加对错误DS18B20温度数据的判断127.94 1279.420210628 更新 优先使用DHT11温度作为环境温度,通过外部目录判断读取哪个传感器20220316 ZHAOCHENGJIE 优化DHT11温度为负温度后未判断的bug,且以前程序未判断温度小数位buf示例一:接收到的40位数据为:0011 0101 0000 0000 0001 1000 0000 0100 0101 0001湿度高8位 湿度低8位 温度高8位 温度低8位 校验位buf[0]湿度高8位,buf[1]湿度低8位,buf[2]温度高8位,buf[3]温度低8位,buf[4]校验位,*/int DHT11_Read ( )
{int fd;char buf[6];    /* 定义存放数据的数组 */int length;int cnt;int iIsNegative;fd = open ( "/dev/dht11", O_RDONLY );if ( fd == -1 ){printf ( "open failed!\n" ); return -1;}while ( 1 ){length = read( fd, buf, 6 ); /* 读取温湿度数据 */#if 0for (cnt = 0; cnt < 6; cnt++){printf ( "DHT11[%d]\n",buf[cnt]);}
#endifprintf ( "open failed!\n" );if ( length == 0 ){break;}if ( length == -1 ){printf ( "read error!\n" ); return -1;}}//printx("Temp : %d, Humi : %d\n", buf[2], buf[0]);Humidity    = buf[0] + (buf[1]/10) ;iIsNegative = (( buf[3] & 0x80 ) >> 7) ;//温度低八位的最高位为1,则温度为负数 20220317增加移位,否则值为128//printx ( "iIsNegative=%d\n", iIsNegative ) ;//printx ( "( buf[3] & 0x7F )=%d\n", ( buf[3] & 0x7F ) ) ;if ( 1 == iIsNegative ){Temperature = - (float)( (float)buf[2] + ( (float)( buf[3] & 0x7F ) /10) ) ;//20220317增加float到正确的位置 否则float不生效}else{Temperature =  (float)buf[2] +  ((float)buf[3]/10) ;}#if 0sleep ( 1 );
#endifclose ( fd ); /* 关闭DHT11设备节点 */return 0;
}

原因分析:

实际操作中未出现该bug的条件


解决方案:

添加负温度的判断

【DHT11读取负温度】相关推荐

  1. 树莓派3B Qt+dht11读取温湿度并写入数据库202005(8)

    内容 本文介绍:使用树莓派3B Qt+dht11读取温湿度,以一定时间间隔更新数据,显示于界面,并写入数据库 硬件:树莓派3B,温湿度传感器dht11,杜邦线 1.建工程 建立工程后点击mainwin ...

  2. STM32L431(CubeMX)使用DHT11读取环境温度与湿度并通过串口打印

    STM32L431CubeMX使用DHT11读取环境温度与湿度并通过串口打印 一.开发平台 软件下载 1.keil5 2.CubeMx 二.DHT11介绍 三.新建工程步骤 1.CubeMx 2.Ke ...

  3. 通过时序图编程操作DHT11读取温湿度

    目录 一.DHT11模块 二.时序图分析 总的时序: 开始信号与响应信号: 读取数据: 停止信号: 三.程序部分 一.DHT11模块 Dht11温湿度检测模块,模块引出引脚有VCC.GND和DATA, ...

  4. dht11 java_树莓派从DHT11读取温湿度

    树莓派之DHT11传感器 硬件DHT11 主要看其原理,具体的详细原理大家就搜索引擎都能搜到. 也是为了好奇心,入手一台便宜的示波器,看看具体波形,下面是我所测: 这张显示首次触发,主机至少下拉18m ...

  5. Arduino从DHT11读取温湿度数据并显示在1602LCD

    硬件清单 Arduino NANO 1602LCD + PCF8574T模块 YL-47 DHT11模块 连线 1. 连接LCD: PCF8574T模块4pin(Gnd, Vcc, SDA i2c数据 ...

  6. STM8单片机读取DHT11温湿度传感器

    DHT11是一款温湿度传感器,也是使用一根总线来驱动,使用方法和ds18b20温度传感器很类似. 供电电压 3.3~5.5V DC 测量范围 湿度5% ~ 95%RH, 温度-20℃ ~ +60℃ 测 ...

  7. STM32103读取 DHT11时 对 DHT11_Read_Bit 的理解

    STM32103读取 DHT11时 对 DHT11_Read_Bit() 的理解 DHT11的时序是: 原子的库函数DHT11里面,关于读取bit的函数有40us的延时不是很理解,依据DHT11的数据 ...

  8. Orange Pi 香橙派 zero h2+ 实现DHT11 温湿度的读取 (附录代码也适用于 树莓派 DHT11)

    OrangePi   的 26 pin 接口图   13 pin 接口图 以下分5步介绍使用 wiringPi,实现读 DHT11 . (wiringPi是一个很棒的  IO 控制库,使用C语言开发, ...

  9. STM32读取MQ4传感器、DHT11温湿度传感器、GP2Y1014AU0F夏普光学灰尘传感器数据

    1.功能 STM32测量MQ4.灰尘传感器.DHT11温湿度传感器,并在TFT上显示,超过浓度阈值蜂鸣器报警. 使用普中STM32F103ZET6开发板+2.8寸触摸屏. 2.MQ4天然气传感器 MQ ...

最新文章

  1. 学习Java的几大难题,你们都解决了吗?
  2. java jpanel 叠加_java – 如何在JPanel上叠加,调整大小和居中组件?
  3. (237)Vivado工程编译时间过长原因总结
  4. python3.5安装教程及环境配置_Python安装和环境配置教程
  5. ios13.5正式版信号怎样?
  6. 小程序代码压缩之js压缩
  7. 【Vue.$delete】 删除
  8. 华为云Hadoop与Spark集群环境搭建
  9. Caused by: No object in the CompoundRoot has a publicly accessible property named 'y' (no setter cou
  10. python入门与实战--ENS未注册域名批量查询
  11. 芝诺数解|「十三」一菜一格,百菜百味——重庆川菜数据分析报告
  12. HTTP状态码(200、302、404、503)
  13. 计算机只报数字怎么调成音乐,电脑怎么设置一锁屏音乐就停?
  14. [附源码]java毕业设计领导干部听课评课管理系统
  15. New Bing新必应内测资格申请教程,无需科学上网,一分钟搞定!
  16. Hive数据仓库实战
  17. 新浪乐居——走进用友软件园活动
  18. 在服务器上安装媒体播放器
  19. 如何使用Fresco
  20. 用于改进筛查的乳腺癌异常检测

热门文章

  1. java 立体几何体中心点_在Word 2000中巧妙绘制立体几何图形
  2. wince4.2的中文输入法
  3. 2020最新中高阶Android面试题总结 下(附解题思路)
  4. 爱斯维尔LATEX要求
  5. 软件测试的学习笔记(5)
  6. python跨文件调用lambda函数_python基础-4 函数参数引用、lambda 匿名函数、内置函数、处理文件...
  7. roslaunch mavros px4.launch fcu_url=xxxx到底做了什么
  8. 搜索下载资源方式方法
  9. win10一直卡在自动修复_Win10开机一直转圈圈怎么办?一直转圈进不去系统的解决方法...
  10. python语言程序设计_梁勇—第五章练习题重点题目答案