我在Arduino上使用24位I2C ADC,没有3字节(24位)数据类型,所以我改用uint32_t
32位无符号整数。但是,我的实际输出是一个24位带符号的数字,如下所示:
如果您对此感兴趣,这也是我用来读取结果的代码:
uint32_t readData(){
Wire.beginTransmission(address);
Wire.write(0x10);
Wire.endTransmission();
Wire.requestFrom(address,3);
byte dataMSB = Wire.read();
byte data = Wire.read();
byte dataLSB = Wire.read();
uint32_t data32 = dataMSB;
data32 <<= 8;
data32 |= data;
data32 <<= 8;
data32 |= dataLSB;
return data32;
}
为了使该数字有用,我需要将其转换回一个24位带符号整数(我不确定该怎么做,或者是否有可能平安夜,因为24不是2的幂),所以我是有点卡住。如果有人快要完成我的项目,那将是很棒的选择,这是最后几步之一。
Use int32_t
instead of unit32_t
for data32
. Then before returning the value, shift it left by 8, then right by 8 to sign extend it.
So this code:
uint32_t readData(){
Wire.beginTransmission(address);
Wire.write(0x10);
Wire.endTransmission();
Wire.requestFrom(address,3);
byte dataMSB = Wire.read();
byte data = Wire.read();
byte dataLSB = Wire.read();
int32_t data32 = dataMSB;
data32 <<= 8;
data32 |= data;
data32 <<= 8;
data32 |= dataLSB;
return (data32 << 8) >> 8;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句