【DHT11读取负温度】
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读取负温度】相关推荐
- 树莓派3B Qt+dht11读取温湿度并写入数据库202005(8)
内容 本文介绍:使用树莓派3B Qt+dht11读取温湿度,以一定时间间隔更新数据,显示于界面,并写入数据库 硬件:树莓派3B,温湿度传感器dht11,杜邦线 1.建工程 建立工程后点击mainwin ...
- STM32L431(CubeMX)使用DHT11读取环境温度与湿度并通过串口打印
STM32L431CubeMX使用DHT11读取环境温度与湿度并通过串口打印 一.开发平台 软件下载 1.keil5 2.CubeMx 二.DHT11介绍 三.新建工程步骤 1.CubeMx 2.Ke ...
- 通过时序图编程操作DHT11读取温湿度
目录 一.DHT11模块 二.时序图分析 总的时序: 开始信号与响应信号: 读取数据: 停止信号: 三.程序部分 一.DHT11模块 Dht11温湿度检测模块,模块引出引脚有VCC.GND和DATA, ...
- dht11 java_树莓派从DHT11读取温湿度
树莓派之DHT11传感器 硬件DHT11 主要看其原理,具体的详细原理大家就搜索引擎都能搜到. 也是为了好奇心,入手一台便宜的示波器,看看具体波形,下面是我所测: 这张显示首次触发,主机至少下拉18m ...
- Arduino从DHT11读取温湿度数据并显示在1602LCD
硬件清单 Arduino NANO 1602LCD + PCF8574T模块 YL-47 DHT11模块 连线 1. 连接LCD: PCF8574T模块4pin(Gnd, Vcc, SDA i2c数据 ...
- STM8单片机读取DHT11温湿度传感器
DHT11是一款温湿度传感器,也是使用一根总线来驱动,使用方法和ds18b20温度传感器很类似. 供电电压 3.3~5.5V DC 测量范围 湿度5% ~ 95%RH, 温度-20℃ ~ +60℃ 测 ...
- STM32103读取 DHT11时 对 DHT11_Read_Bit 的理解
STM32103读取 DHT11时 对 DHT11_Read_Bit() 的理解 DHT11的时序是: 原子的库函数DHT11里面,关于读取bit的函数有40us的延时不是很理解,依据DHT11的数据 ...
- Orange Pi 香橙派 zero h2+ 实现DHT11 温湿度的读取 (附录代码也适用于 树莓派 DHT11)
OrangePi 的 26 pin 接口图 13 pin 接口图 以下分5步介绍使用 wiringPi,实现读 DHT11 . (wiringPi是一个很棒的 IO 控制库,使用C语言开发, ...
- STM32读取MQ4传感器、DHT11温湿度传感器、GP2Y1014AU0F夏普光学灰尘传感器数据
1.功能 STM32测量MQ4.灰尘传感器.DHT11温湿度传感器,并在TFT上显示,超过浓度阈值蜂鸣器报警. 使用普中STM32F103ZET6开发板+2.8寸触摸屏. 2.MQ4天然气传感器 MQ ...
最新文章
- 学习Java的几大难题,你们都解决了吗?
- java jpanel 叠加_java – 如何在JPanel上叠加,调整大小和居中组件?
- (237)Vivado工程编译时间过长原因总结
- python3.5安装教程及环境配置_Python安装和环境配置教程
- ios13.5正式版信号怎样?
- 小程序代码压缩之js压缩
- 【Vue.$delete】 删除
- 华为云Hadoop与Spark集群环境搭建
- Caused by: No object in the CompoundRoot has a publicly accessible property named 'y' (no setter cou
- python入门与实战--ENS未注册域名批量查询
- 芝诺数解|「十三」一菜一格,百菜百味——重庆川菜数据分析报告
- HTTP状态码(200、302、404、503)
- 计算机只报数字怎么调成音乐,电脑怎么设置一锁屏音乐就停?
- [附源码]java毕业设计领导干部听课评课管理系统
- New Bing新必应内测资格申请教程,无需科学上网,一分钟搞定!
- Hive数据仓库实战
- 新浪乐居——走进用友软件园活动
- 在服务器上安装媒体播放器
- 如何使用Fresco
- 用于改进筛查的乳腺癌异常检测
热门文章
- java 立体几何体中心点_在Word 2000中巧妙绘制立体几何图形
- wince4.2的中文输入法
- 2020最新中高阶Android面试题总结 下(附解题思路)
- 爱斯维尔LATEX要求
- 软件测试的学习笔记(5)
- python跨文件调用lambda函数_python基础-4 函数参数引用、lambda 匿名函数、内置函数、处理文件...
- roslaunch mavros px4.launch fcu_url=xxxx到底做了什么
- 搜索下载资源方式方法
- win10一直卡在自动修复_Win10开机一直转圈圈怎么办?一直转圈进不去系统的解决方法...
- python语言程序设计_梁勇—第五章练习题重点题目答案