为什么我与HEX枚举的比较失败?
问题描述:
我看到磨片将存储到一个枚举和读取寄存器值的十六进制值一个奇怪的问题,我已经定义我的CHIPID如下为什么我与HEX枚举的比较失败?
enum {
BME_280_1_CHIPID = 0x60,
BME_280_2_CHIPID = 0x58,
};
我有此代码段在我的司机在芯片ID是检查
uint8_t id = read8(BME280_REGISTER_CHIPID);
if ((id != BME_280_2_CHIPID) || (id != BME_280_1_CHIPID)){
#ifdef DEBUG
uint8_t value = read8(BME280_REGISTER_CHIPID);
debugPrint("BME280 DEBUG: read BME280_CHIPID ");
debugPrint(value,HEX);
debugPrint(" expected ");
debugPrint(BME_280_1_CHIPID,HEX);
debugPrint(" or ");
debugPrintLn(BME_280_2_CHIPID,HEX);
#endif
return false;
}
我read8()funtion是
uint8_t Adafruit_BME280::read8(byte reg)
{
uint8_t value;
Wire1.beginTransmission((uint8_t)_i2caddr);
Wire1.write((uint8_t)reg);
Wire1.endTransmission();
Wire1.requestFrom((uint8_t)_i2caddr, (byte)1);
value = Wire1.read();
return value;
}
然而,调试显示
BME280 DEBUG: read BME280_CHIPID 58 expected 60 or 58
BME280 MISSING!
发生了什么事?
在此先感谢,
问候!
答
为Andriano Repetti解决方案告诉
uint8_t id = read8(BME280_REGISTER_CHIPID);
if ((id != BME_280_2_CHIPID) && (id != BME_280_1_CHIPID)){
#ifdef DEBUG
uint8_t value = read8(BME280_REGISTER_CHIPID);
debugPrint("BME280 DEBUG: read BME280_CHIPID ");
debugPrint(value,HEX);
debugPrint(" expected ");
debugPrint(BME_280_1_CHIPID,HEX);
debugPrint(" or ");
debugPrintLn(BME_280_2_CHIPID,HEX);
#endif
return false;
}
注:!'值= ||一值!= b'。除非'a == b',否则其中一个肯定是'true'。将其更改为'&&'。 –
@AdrianoRepetti'a == b','value'永远不会改变 – ndarkness
@ndarkness不,其中一个值是0x60(96),另一个是0x58(94)。所有的数字都不等于其中的一个。例如,'BME_280_1_CHIPID!= BME_280_2_CHIPID'。 – molbdnilo