如果学了前文看这个就容易了,这个操作来自于ADS1115的转换数据读取。
可以看到是一个16bit的结果,所以就要接收和拼接
这个就是转换的代码
通过I2C通信与ADC设备交互,读取转换结果。 返回一个16位的有符号整数(int16_t),表示ADC的转换结果。
配置ADC寄存器以启动转换。 等待转换完成(如果是单次转换模式)。 读取转换结果并返回。
regValue = 1 << 15 | registerMap[CONFIG_ADDRESS];
将regValue
的第15位设置为1,同时保留reg
的当前配置。
意思是说,单次转换启动
寄存器的地址在这里
TI的设计是,把寄存器的数量先定义好
然后在控制的时候,先定位到数组
就是后面
|
是按位或操作,用于合并位。也可以说前面1<<15其实是位掩码。一计算就把配置寄存器的值修改了。
看这个,&,这个读取一个寄存器的位
在这里
这里就判断单次转换模式是不是启用
receiveI2CData(CONFIG_ADDRESS, regData, 2):
if (retStatus != false):
!(regData[0] & 0x80):
如果第7位为1,表示转换完成。 如果第7位为0,表示转换未完成。
通常是一个特定的位(如第7位),用于指示转换是否完成。 通过按位与操作(&)提取该位并检查其值。
使用 do-while 循环不断读取配置寄存器,直到转换完成。 如果I2C通信失败,函数返回0。
这里面有个合并函数,因为读取回来两个字节
相信你认真学习我的文章一定学会了
就相当于学会多,这个投资值了,很新的库