mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-27 20:56:35 +00:00
fix I2C-issues, refactoring and code shrink
This commit is contained in:
parent
0830fe113d
commit
35990dbad4
@ -53,7 +53,11 @@ void LM75ADDetect(void)
|
|||||||
{
|
{
|
||||||
for (uint32_t i = 0; i < sizeof(lm75ad_addresses); i++) {
|
for (uint32_t i = 0; i < sizeof(lm75ad_addresses); i++) {
|
||||||
lm75ad_address = lm75ad_addresses[i];
|
lm75ad_address = lm75ad_addresses[i];
|
||||||
if (I2cActive(lm75ad_address)) { continue; }
|
if (I2cActive(lm75ad_address)) {
|
||||||
|
continue; }
|
||||||
|
if (!I2cSetDevice(lm75ad_address)) {
|
||||||
|
break; // do not make the next step without a confirmed device on the bus
|
||||||
|
}
|
||||||
uint16_t buffer;
|
uint16_t buffer;
|
||||||
if (I2cValidRead16(&buffer, lm75ad_address, LM75_THYST_REGISTER)) {
|
if (I2cValidRead16(&buffer, lm75ad_address, LM75_THYST_REGISTER)) {
|
||||||
if (buffer == 0x4B00) {
|
if (buffer == 0x4B00) {
|
||||||
|
@ -31,58 +31,37 @@
|
|||||||
#define MLX90614_TOBJ1 0x07
|
#define MLX90614_TOBJ1 0x07
|
||||||
#define MLX90614_TOBJ2 0x08
|
#define MLX90614_TOBJ2 0x08
|
||||||
|
|
||||||
bool mlx_ready = false;
|
struct {
|
||||||
float obj_temp;
|
union {
|
||||||
float amb_temp;
|
uint16_t value;
|
||||||
|
uint32_t i2c_buf;
|
||||||
|
};
|
||||||
|
float obj_temp;
|
||||||
|
float amb_temp;
|
||||||
|
bool ready = false;
|
||||||
|
} mlx90614;
|
||||||
|
|
||||||
void MLX90614_Init(void)
|
void MLX90614_Init(void)
|
||||||
{
|
{
|
||||||
if (!I2cSetDevice(I2_ADR_IRT)) { return; }
|
if (!I2cSetDevice(I2_ADR_IRT)) { return; }
|
||||||
|
|
||||||
I2cSetActiveFound(I2_ADR_IRT, "MLX90614");
|
I2cSetActiveFound(I2_ADR_IRT, "MLX90614");
|
||||||
mlx_ready = true;
|
mlx90614.ready = true;
|
||||||
|
|
||||||
// not needed on tasmota
|
|
||||||
//Wire.begin();
|
|
||||||
//delay(500);
|
|
||||||
}
|
|
||||||
|
|
||||||
// return ir temp
|
|
||||||
// 0 = chip, 1 = object temperature
|
|
||||||
// * 0.02 - 273.15
|
|
||||||
uint16_t read_irtmp(uint8_t flag)
|
|
||||||
{
|
|
||||||
Wire.beginTransmission(I2_ADR_IRT);
|
|
||||||
if (!flag) {
|
|
||||||
Wire.write(MLX90614_TA);
|
|
||||||
} else {
|
|
||||||
Wire.write(MLX90614_TOBJ1);
|
|
||||||
}
|
|
||||||
Wire.endTransmission(false);
|
|
||||||
|
|
||||||
Wire.requestFrom(I2_ADR_IRT, 3);
|
|
||||||
uint8_t low = Wire.read();
|
|
||||||
uint8_t hig = Wire.read();
|
|
||||||
Wire.read();
|
|
||||||
|
|
||||||
uint16_t val = ((uint16_t)hig << 8) | low;
|
|
||||||
return val;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MLX90614_Every_Second(void)
|
void MLX90614_Every_Second(void)
|
||||||
{
|
{
|
||||||
uint16_t uval = read_irtmp(1);
|
mlx90614.i2c_buf = I2cRead24(I2_ADR_IRT, MLX90614_TOBJ1);
|
||||||
if (uval & 0x8000) {
|
if (mlx90614.value & 0x8000) {
|
||||||
obj_temp = -999;
|
mlx90614.obj_temp = -999;
|
||||||
} else {
|
} else {
|
||||||
obj_temp = ((float)uval * 0.02) - 273.15;
|
mlx90614.obj_temp = ((float)mlx90614.value * 0.02) - 273.15;
|
||||||
}
|
}
|
||||||
uval = read_irtmp(0);
|
mlx90614.i2c_buf = I2cRead24(I2_ADR_IRT,MLX90614_TA);
|
||||||
if (uval & 0x8000) {
|
if (mlx90614.value & 0x8000) {
|
||||||
amb_temp = -999;
|
mlx90614.amb_temp = -999;
|
||||||
} else {
|
} else {
|
||||||
amb_temp = ((float)uval * 0.02) - 273.15;
|
mlx90614.amb_temp = ((float)mlx90614.value * 0.02) - 273.15;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_WEBSERVER
|
#ifdef USE_WEBSERVER
|
||||||
@ -94,9 +73,9 @@ void MLX90614_Every_Second(void)
|
|||||||
void MLX90614_Show(uint8_t json)
|
void MLX90614_Show(uint8_t json)
|
||||||
{
|
{
|
||||||
char obj_tstr[16];
|
char obj_tstr[16];
|
||||||
dtostrfd(obj_temp, Settings.flag2.temperature_resolution, obj_tstr);
|
dtostrfd(mlx90614.obj_temp, Settings.flag2.temperature_resolution, obj_tstr);
|
||||||
char amb_tstr[16];
|
char amb_tstr[16];
|
||||||
dtostrfd(amb_temp, Settings.flag2.temperature_resolution, amb_tstr);
|
dtostrfd(mlx90614.amb_temp, Settings.flag2.temperature_resolution, amb_tstr);
|
||||||
|
|
||||||
if (json) {
|
if (json) {
|
||||||
ResponseAppend_P(PSTR(",\"MLX90614\":{\"OBJTMP\":%s,\"AMBTMP\":%s}"), obj_tstr, amb_tstr);
|
ResponseAppend_P(PSTR(",\"MLX90614\":{\"OBJTMP\":%s,\"AMBTMP\":%s}"), obj_tstr, amb_tstr);
|
||||||
@ -120,7 +99,7 @@ bool Xsns46(byte function)
|
|||||||
if (FUNC_INIT == function) {
|
if (FUNC_INIT == function) {
|
||||||
MLX90614_Init();
|
MLX90614_Init();
|
||||||
}
|
}
|
||||||
else if (mlx_ready) {
|
else if (mlx90614.ready) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
case FUNC_EVERY_SECOND:
|
case FUNC_EVERY_SECOND:
|
||||||
MLX90614_Every_Second();
|
MLX90614_Every_Second();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user