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
相关产品推荐
相关产品推荐

