CM3592 simple library
CM3592.cpp@1:8547ec72dba2, 2018-04-27 (annotated)
- Committer:
- johnathanlyu
- Date:
- Fri Apr 27 09:58:04 2018 +0000
- Revision:
- 1:8547ec72dba2
- Parent:
- 0:a434d2ca0357
update library flow
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
johnathanlyu | 0:a434d2ca0357 | 1 | #include "CM3592.h" |
johnathanlyu | 0:a434d2ca0357 | 2 | |
johnathanlyu | 0:a434d2ca0357 | 3 | CM3592::CM3592(I2C& i2c) : m_i2c(i2c) { |
johnathanlyu | 1:8547ec72dba2 | 4 | config[0] = 0x00; //default LSB set 60ms integration. |
johnathanlyu | 1:8547ec72dba2 | 5 | config[1] = 0x82; //default MSB set Hight Sensitivity and High Dynamic Range. |
johnathanlyu | 0:a434d2ca0357 | 6 | } |
johnathanlyu | 0:a434d2ca0357 | 7 | |
johnathanlyu | 0:a434d2ca0357 | 8 | int CM3592::init() { |
johnathanlyu | 0:a434d2ca0357 | 9 | |
johnathanlyu | 0:a434d2ca0357 | 10 | // char data[3] = { CM3592_REG_CTRL, config[0], config[1]}; |
johnathanlyu | 0:a434d2ca0357 | 11 | // m_i2c.write(CM3592_ADDR, data, 3, false); |
johnathanlyu | 0:a434d2ca0357 | 12 | |
johnathanlyu | 0:a434d2ca0357 | 13 | write(CM3592_REG_CTRL, config); |
johnathanlyu | 0:a434d2ca0357 | 14 | |
johnathanlyu | 0:a434d2ca0357 | 15 | |
johnathanlyu | 0:a434d2ca0357 | 16 | return 0; |
johnathanlyu | 0:a434d2ca0357 | 17 | } |
johnathanlyu | 0:a434d2ca0357 | 18 | |
johnathanlyu | 0:a434d2ca0357 | 19 | int CM3592::init(char configL, char configH) { |
johnathanlyu | 0:a434d2ca0357 | 20 | |
johnathanlyu | 0:a434d2ca0357 | 21 | config[0] = configL; |
johnathanlyu | 0:a434d2ca0357 | 22 | config[1] = configH; |
johnathanlyu | 0:a434d2ca0357 | 23 | write(CM3592_REG_CTRL, config); |
johnathanlyu | 0:a434d2ca0357 | 24 | |
johnathanlyu | 0:a434d2ca0357 | 25 | return 0; |
johnathanlyu | 0:a434d2ca0357 | 26 | |
johnathanlyu | 0:a434d2ca0357 | 27 | } |
johnathanlyu | 0:a434d2ca0357 | 28 | |
johnathanlyu | 0:a434d2ca0357 | 29 | int CM3592::readData(uint16_t *uv) { |
johnathanlyu | 0:a434d2ca0357 | 30 | |
johnathanlyu | 0:a434d2ca0357 | 31 | char uv_raw[2]; |
johnathanlyu | 0:a434d2ca0357 | 32 | |
johnathanlyu | 0:a434d2ca0357 | 33 | read(CM3592_REG_UV_DATA, uv_raw); |
johnathanlyu | 0:a434d2ca0357 | 34 | |
johnathanlyu | 0:a434d2ca0357 | 35 | *uv = uv_raw[1]<<8 | uv_raw[0]; |
johnathanlyu | 0:a434d2ca0357 | 36 | |
johnathanlyu | 0:a434d2ca0357 | 37 | return 0; |
johnathanlyu | 0:a434d2ca0357 | 38 | } |
johnathanlyu | 0:a434d2ca0357 | 39 | |
johnathanlyu | 0:a434d2ca0357 | 40 | int CM3592::getUVIndex(uint16_t uv) { |
johnathanlyu | 0:a434d2ca0357 | 41 | if(uv<747){ |
johnathanlyu | 0:a434d2ca0357 | 42 | return 0; |
johnathanlyu | 0:a434d2ca0357 | 43 | }else if(uv>=747 && uv<1494){ |
johnathanlyu | 0:a434d2ca0357 | 44 | return 1; |
johnathanlyu | 0:a434d2ca0357 | 45 | }else if(uv>=1494 && uv<2442){ |
johnathanlyu | 0:a434d2ca0357 | 46 | return 2; |
johnathanlyu | 0:a434d2ca0357 | 47 | }else if(uv>=2442 && uv<3188){ |
johnathanlyu | 0:a434d2ca0357 | 48 | return 3; |
johnathanlyu | 0:a434d2ca0357 | 49 | }else if(uv>=3188 && uv<3735){ |
johnathanlyu | 0:a434d2ca0357 | 50 | return 4; |
johnathanlyu | 0:a434d2ca0357 | 51 | }else if(uv>=3735 && uv<4483){ |
johnathanlyu | 0:a434d2ca0357 | 52 | return 5; |
johnathanlyu | 0:a434d2ca0357 | 53 | }else if(uv>=4483 && uv<5229){ |
johnathanlyu | 0:a434d2ca0357 | 54 | return 6; |
johnathanlyu | 0:a434d2ca0357 | 55 | }else if(uv>=5229 && uv<5977){ |
johnathanlyu | 0:a434d2ca0357 | 56 | return 7; |
johnathanlyu | 0:a434d2ca0357 | 57 | }else if(uv>=5977 && uv<6724){ |
johnathanlyu | 0:a434d2ca0357 | 58 | return 8; |
johnathanlyu | 0:a434d2ca0357 | 59 | }else if(uv>=6724 && uv<7471){ |
johnathanlyu | 0:a434d2ca0357 | 60 | return 9; |
johnathanlyu | 0:a434d2ca0357 | 61 | }else if(uv>=7471 && uv<8218){ |
johnathanlyu | 0:a434d2ca0357 | 62 | return 10; |
johnathanlyu | 0:a434d2ca0357 | 63 | }else{ |
johnathanlyu | 0:a434d2ca0357 | 64 | return 10; |
johnathanlyu | 0:a434d2ca0357 | 65 | } |
johnathanlyu | 0:a434d2ca0357 | 66 | } |
johnathanlyu | 0:a434d2ca0357 | 67 | |
johnathanlyu | 0:a434d2ca0357 | 68 | void CM3592::write(char reg, char data[]) { |
johnathanlyu | 0:a434d2ca0357 | 69 | char send[3]; |
johnathanlyu | 0:a434d2ca0357 | 70 | send[0] = reg; |
johnathanlyu | 0:a434d2ca0357 | 71 | send[1] = data[0]; |
johnathanlyu | 0:a434d2ca0357 | 72 | send[2] = data[1]; |
johnathanlyu | 0:a434d2ca0357 | 73 | m_i2c.write(CM3592_ADDR, send, 3, false); |
johnathanlyu | 0:a434d2ca0357 | 74 | } |
johnathanlyu | 0:a434d2ca0357 | 75 | |
johnathanlyu | 0:a434d2ca0357 | 76 | void CM3592::read(char reg, char data[]) { |
johnathanlyu | 0:a434d2ca0357 | 77 | m_i2c.write(CM3592_ADDR, ®, 1, false); |
johnathanlyu | 0:a434d2ca0357 | 78 | m_i2c.read(CM3592_ADDR, data, 2, false); |
johnathanlyu | 0:a434d2ca0357 | 79 | |
johnathanlyu | 0:a434d2ca0357 | 80 | m_i2c.write(CM3592_ADDR, ®, 1, false); |
johnathanlyu | 0:a434d2ca0357 | 81 | // i2c.read(addr, rx, 2, false); |
johnathanlyu | 0:a434d2ca0357 | 82 | } |