89 lines
2.7 KiB
C++
89 lines
2.7 KiB
C++
// DuinoplusMLX90615.h
|
||
|
||
#ifndef _DUINOPLUSMLX90615_h
|
||
#define _DUINOPLUSMLX90615_h
|
||
|
||
#if defined(ARDUINO) && ARDUINO >= 100
|
||
#include "arduino.h"
|
||
#else
|
||
#include "WProgram.h"
|
||
#endif
|
||
|
||
/*<2A><><EFBFBD><EFBFBD><EEB6A8>*/
|
||
#define ADDRESS 0x10 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||
#define PWM_T_MIN 0x10
|
||
#define PWM_T_RANGE 0x11
|
||
#define CONFIG 0x12 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
#define EMISSIVITY 0x13 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
#define ID_LOW 0x1E
|
||
#define ID_HIGH 0x1F
|
||
#define ROW_IR_DATA 0x25 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
#define TEMP_TA 0x26 //оƬ<D0BE>¶<EFBFBD>
|
||
#define TEMP_TO 0x27 //<2F><><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>¶<EFBFBD>
|
||
#define SLEEP 0xC6 //<2F><><EFBFBD><EFBFBD>
|
||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>*/
|
||
#define PWM 0 //PWM ͨ<>ŷ<EFBFBD>ʽ
|
||
#define IIC 1 //SMBus ͨ<>ŷ<EFBFBD>ʽ
|
||
#define PWM_L (1<<1) //PWMƵ<4D><C6B5>ѡ<EFBFBD><D1A1><EFBFBD>Ƶ <20><>Ƶ
|
||
#define PWM_H (0<<1) //PWMƵ<4D><C6B5>ѡ<EFBFBD><D1A1><EFBFBD>Ƶ
|
||
#define PWM_TEMP_TA (1<<2) //PWM<57><4D><EFBFBD><EFBFBD>¶<EFBFBD>ѡ<EFBFBD><D1A1>оƬ
|
||
#define PWM_TEMP_TO (0<<2) //PWM<57><4D><EFBFBD><EFBFBD>¶<EFBFBD>ѡ<EFBFBD><EFBFBD><F1B1BBB2><EFBFBD><EFBFBD><EFBFBD>
|
||
#define IIR_1 0x1000 //<2F><><EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
#define IIR_10 0x2000
|
||
#define IIR_18 0x3000
|
||
#define IIR_24 0x4000
|
||
#define IIR_31 0x5000
|
||
#define IIR_38 0x6000
|
||
#define IIR_45 0x7000
|
||
|
||
#define SLEEP_ON 1
|
||
#define SLEEP_OFF 0
|
||
|
||
typedef enum{
|
||
CHIP_TEMP,
|
||
OBJ_TEMP
|
||
}TEMP;
|
||
|
||
typedef enum{
|
||
IIC_MODE,
|
||
PWM_MODE
|
||
}MODE;
|
||
|
||
class MLX90615
|
||
{
|
||
public:
|
||
MLX90615(MODE rwMode = IIC_MODE);
|
||
~MLX90615();
|
||
|
||
void begin(void);
|
||
|
||
uint8_t getAddr(void);
|
||
void setAddr(uint8_t addr_L, uint8_t addr_H);
|
||
float getEmissivity(void); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>
|
||
void setEmissivity(float e); //<2F><><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>
|
||
float getPWM_T_min(void);
|
||
void setPWM_T_min(float dat);
|
||
float getPWM_T_range(void);
|
||
void setPWM_T_range(float dat);
|
||
uint16_t getConfig(void);
|
||
void setConfig(uint16_t dat);
|
||
uint8_t getIIR(void); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD>ֵ
|
||
uint8_t setIIR(uint16_t); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD>ֵ
|
||
uint32_t getID(void);
|
||
float getTemp(TEMP temp=OBJ_TEMP);
|
||
void sleep(boolean sleepFlag);
|
||
void PWM2IIC(void); //PWMģʽ<C4A3>л<EFBFBD><D0BB><EFBFBD>IICģʽ
|
||
|
||
private:
|
||
MODE rwMode; //ͨ<><CDA8>ģʽ<C4A3><CABD>IIC<49><43>PWM
|
||
uint8_t device_addr;
|
||
|
||
void erase(uint8_t addr); //<2F><><EFBFBD><EFBFBD>,EEPROM<4F><4D><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD>ʱ<EFBFBD><CAB1>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>Ҫִ<D2AA>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
void write(uint8_t cmd, uint8_t dat_L, uint8_t dat_H);
|
||
uint8_t read(uint8_t cmd, uint8_t *buffer);
|
||
uint8_t crc8(uint8_t *buf, uint8_t len); //CRC8У<38><D0A3>
|
||
};
|
||
|
||
#endif
|
||
|