69 lines
1.9 KiB
C++
69 lines
1.9 KiB
C++
/***************************************************
|
|
This is a library for the MLX90614 Temp Sensor
|
|
|
|
Designed specifically to work with the MLX90614 sensors in the
|
|
adafruit shop
|
|
----> https://www.adafruit.com/products/1747 (3V)
|
|
----> https://www.adafruit.com/products/1748 (5V)
|
|
|
|
These sensors use I2C to communicate, 2 pins are required to
|
|
interface
|
|
Adafruit invests time and resources providing this open source code,
|
|
please support Adafruit and open-source hardware by purchasing
|
|
products from Adafruit!
|
|
|
|
Written by Limor Fried/Ladyada for Adafruit in any redistribution
|
|
****************************************************/
|
|
|
|
#include <Adafruit_I2CDevice.h>
|
|
#include <Arduino.h>
|
|
|
|
#define MLX90614_I2CADDR 0x5A
|
|
|
|
// RAM
|
|
#define MLX90614_RAWIR1 0x04
|
|
#define MLX90614_RAWIR2 0x05
|
|
#define MLX90614_TA 0x06
|
|
#define MLX90614_TOBJ1 0x07
|
|
#define MLX90614_TOBJ2 0x08
|
|
// EEPROM
|
|
#define MLX90614_TOMAX 0x20
|
|
#define MLX90614_TOMIN 0x21
|
|
#define MLX90614_PWMCTRL 0x22
|
|
#define MLX90614_TARANGE 0x23
|
|
#define MLX90614_EMISS 0x24
|
|
#define MLX90614_CONFIG 0x25
|
|
#define MLX90614_ADDR 0x2E
|
|
#define MLX90614_ID1 0x3C
|
|
#define MLX90614_ID2 0x3D
|
|
#define MLX90614_ID3 0x3E
|
|
#define MLX90614_ID4 0x3F
|
|
|
|
/**
|
|
* @brief Class to read from and control a MLX90614 Temp Sensor
|
|
*
|
|
*/
|
|
class Adafruit_MLX90614 {
|
|
public:
|
|
~Adafruit_MLX90614();
|
|
bool begin(uint8_t addr = MLX90614_I2CADDR, TwoWire *wire = &Wire);
|
|
|
|
double readObjectTempC(void);
|
|
double readAmbientTempC(void);
|
|
double readObjectTempF(void);
|
|
double readAmbientTempF(void);
|
|
uint16_t readEmissivityReg(void);
|
|
void writeEmissivityReg(uint16_t ereg);
|
|
double readEmissivity(void);
|
|
void writeEmissivity(double emissivity);
|
|
|
|
private:
|
|
Adafruit_I2CDevice *i2c_dev = NULL; ///< Pointer to I2C bus interface
|
|
float readTemp(uint8_t reg);
|
|
|
|
uint16_t read16(uint8_t addr);
|
|
void write16(uint8_t addr, uint16_t data);
|
|
byte crc8(byte *addr, byte len);
|
|
uint8_t _addr;
|
|
};
|