MtM+ / CM3592

Dependents:   Mt05_MtSense05

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers CM3592.cpp Source File

CM3592.cpp

00001 #include "CM3592.h"
00002 
00003 CM3592::CM3592(I2C& i2c) : m_i2c(i2c) {
00004         config[0] = 0x00;   //default LSB set 60ms integration.
00005         config[1] = 0x82;   //default MSB set Hight Sensitivity and High Dynamic Range.
00006 }
00007 
00008 int CM3592::init() {
00009     
00010 //    char data[3] = { CM3592_REG_CTRL, config[0], config[1]};    
00011 //    m_i2c.write(CM3592_ADDR, data, 3, false);
00012     
00013     write(CM3592_REG_CTRL, config);
00014     
00015     
00016     return 0;
00017 }
00018 
00019 int CM3592::init(char configL, char configH) {
00020   
00021     config[0] = configL;
00022     config[1] = configH;
00023     write(CM3592_REG_CTRL, config);
00024     
00025     return 0;
00026     
00027 }
00028 
00029 int CM3592::readData(uint16_t *uv) {
00030     
00031     char uv_raw[2];
00032     
00033     read(CM3592_REG_UV_DATA, uv_raw);
00034     
00035     *uv = uv_raw[1]<<8 | uv_raw[0];
00036     
00037     return 0;
00038 }
00039 
00040 int CM3592::getUVIndex(uint16_t uv) {
00041     if(uv<747){
00042         return 0;
00043     }else if(uv>=747 && uv<1494){
00044         return 1;
00045     }else if(uv>=1494 && uv<2442){
00046         return 2;
00047     }else if(uv>=2442 && uv<3188){
00048         return 3;
00049     }else if(uv>=3188 && uv<3735){
00050         return 4;
00051     }else if(uv>=3735 && uv<4483){
00052         return 5;
00053     }else if(uv>=4483 && uv<5229){
00054         return 6;
00055     }else if(uv>=5229 && uv<5977){
00056         return 7;
00057     }else if(uv>=5977 && uv<6724){
00058         return 8;
00059     }else if(uv>=6724 && uv<7471){
00060         return 9;
00061     }else if(uv>=7471 && uv<8218){
00062         return 10;
00063     }else{
00064         return 10;
00065     }
00066 }
00067 
00068 void CM3592::write(char reg, char data[]) {
00069     char send[3];
00070     send[0] = reg;
00071     send[1] = data[0];
00072     send[2] = data[1];
00073     m_i2c.write(CM3592_ADDR, send, 3, false);
00074 }
00075 
00076 void CM3592::read(char reg, char data[]) {
00077     m_i2c.write(CM3592_ADDR, &reg, 1, false);
00078     m_i2c.read(CM3592_ADDR, data, 2, false);
00079     
00080     m_i2c.write(CM3592_ADDR, &reg, 1, false);
00081 //    i2c.read(addr, rx, 2, false);
00082 }