You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DHT22传感器读取代码中dht22_dat[j/8] <<=1等语句的含义解析

DHT22温湿度传感器读取代码片段解析

这段代码是树莓派读取DHT22传感器时,将时序信号转换为二进制数据的核心逻辑,先结合DHT22的通信原理理解:DHT22会输出40位二进制数据(对应湿度整数、湿度小数、温度整数、温度小数、校验和),通过高电平持续时长区分0和1——短高电平(约26-28μs)代表0,长高电平(约70μs)代表1。下面逐行解释代码:

  • dht22_dat[j/8] <<= 1;
    dht22_dat是存储最终温湿度数据的字节数组,j是当前正在处理的二进制位序号(0到39)。j/8是整数除法,用来定位当前要操作的是数组里的第几个字节(比如j=0-7对应第0个字节,j=8-15对应第1个字节)。这行代码把目标字节左移一位,给即将到来的新二进制位腾出最右侧的空位。

  • if (counter > 16)
    counter是记录DHT22输出高电平持续时间的计数器。这里的16是实际测试得出的阈值:当计数器值大于16时,说明当前高电平持续时间足够长,对应二进制位为1;反之则为0。

  • dht22_dat[j/8] |= 1;
    如果判定当前二进制位是1,就把目标字节的最低位设为1;如果是0,经过前面的左移操作,最低位本来就是0,无需额外处理。

  • j++;
    将当前处理的二进制位序号加1,准备处理下一位数据。

内容的提问来源于stack exchange,提问作者iRob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 14:50:30