Files

89 lines
2.7 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 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