#include <Wire.h>
#include "iggo_i51.h"
iggo_i51::iggo_i51()
{
}
void iggo_i51::begin() {
Wire.begin();
setResolution(14);
}
void iggo_i51::setResolution(uint8_t resolution)
{
SI7051_Register reg;
switch (resolution)
{
case 14:
reg.res1b7 = 0;
reg.res0b0 = 0;
break;
case 13:
reg.res1b7 = 1;
reg.res0b0 = 0;
break;
case 12:
reg.res1b7 = 0;
reg.res0b0 = 1;
break;
case 11:
reg.res0b0 = 1;
reg.res1b7 = 1;
break;
}
Wire.beginTransmission(0x40);
Wire.write(0xE6);
Wire.write(reg.rawData);
Wire.endTransmission();
}
float iggo_i51::readTemp() {
Wire.beginTransmission(0x40);
Wire.write(0xF3);
Wire.endTransmission();
delay(15);
Wire.requestFrom(0x40, (uint8_t)2);
byte msb = Wire.read();
byte lsb = Wire.read();
uint16_t val = msb << 8 | lsb;
return (175.72*val) / 65536 - 46.85;
}
typedef union {
uint8_t rawData;
struct {
uint8_t res0b0: 1;
uint8_t res1b7: 1;
};
}
SI7051_Register;
class iggo_i51 {
public:
iggo_i51();
void begin();
void setResolution(uint8_t resolution);
float readTemp();