25 #ifndef __SENSORS_MLX90614_h__
26 #define __SENSORS_MLX90614_h__
31 #if defined(ARDUINO) && ARDUINO >= 100
38 #define MLX90614_RAWIR1 0x04
39 #define MLX90614_RAWIR2 0x05
40 #define MLX90614_TA 0x06
41 #define MLX90614_TOBJ1 0x07
42 #define MLX90614_TOBJ2 0x08
44 #define MLX90614_TOMAX 0x20
45 #define MLX90614_TOMIN 0x21
46 #define MLX90614_PWMCTRL 0x22
47 #define MLX90614_TARANGE 0x23
48 #define MLX90614_EMISS 0x24
49 #define MLX90614_CONFIG 0x25
50 #define MLX90614_ADDR 0x0E
51 #define MLX90614_ID1 0x3C
52 #define MLX90614_ID2 0x3D
53 #define MLX90614_ID3 0x3E
54 #define MLX90614_ID4 0x3F
58 template <
byte ADDRESS=0x5a>
61 int16_t _temperatureAmb = -400;
62 int16_t _temperatureObj = -400;
66 _present = read16(MLX90614_CONFIG) != 0xffff;
74 void measure (__attribute__((unused))
bool async=
false) {
75 if( present() ==
true ) {
76 _temperatureAmb = readAmbientTempC();
78 _temperatureObj = readObjectTempC();
83 int16_t readObjectTempC(
void) {
84 return readTemp(MLX90614_TOBJ1);
87 int16_t readAmbientTempC(
void) {
88 return readTemp(MLX90614_TA);
91 float readTemp(uint8_t reg) {
101 uint16_t read16(uint8_t a) {
104 Wire.beginTransmission(ADDRESS);
106 Wire.endTransmission(
false);
108 Wire.requestFrom(ADDRESS, (uint8_t)3);
110 ret |= Wire.read() << 8;
112 uint8_t pec = Wire.read();
117 int16_t temperatureAmb () {
return _temperatureAmb; }
118 int16_t temperatureObj () {
return _temperatureObj; }