/ Adafruit_SI1145.h
Adafruit_SI1145.h
1 /*************************************************** 2 This is a library for the Si1145 UV/IR/Visible Light Sensor 3 4 Designed specifically to work with the Si1145 sensor in the 5 adafruit shop 6 ----> https://www.adafruit.com/products/1777 7 8 These sensors use I2C to communicate, 2 pins are required to 9 interface 10 Adafruit invests time and resources providing this open source code, 11 please support Adafruit and open-source hardware by purchasing 12 products from Adafruit! 13 14 Written by Limor Fried/Ladyada for Adafruit Industries. 15 BSD license, all text above must be included in any redistribution 16 ****************************************************/ 17 #ifndef _SI1145_H_ 18 #define _SI1145_H_ 19 20 #if (ARDUINO >= 100) 21 #include "Arduino.h" 22 #else 23 #include "WProgram.h" 24 #endif 25 #include <Adafruit_I2CDevice.h> 26 27 /* COMMANDS */ 28 #define SI1145_PARAM_QUERY 0x80 29 #define SI1145_PARAM_SET 0xA0 30 #define SI1145_NOP 0x0 31 #define SI1145_RESET 0x01 32 #define SI1145_BUSADDR 0x02 33 #define SI1145_PS_FORCE 0x05 34 #define SI1145_ALS_FORCE 0x06 35 #define SI1145_PSALS_FORCE 0x07 36 #define SI1145_PS_PAUSE 0x09 37 #define SI1145_ALS_PAUSE 0x0A 38 #define SI1145_PSALS_PAUSE 0xB 39 #define SI1145_PS_AUTO 0x0D 40 #define SI1145_ALS_AUTO 0x0E 41 #define SI1145_PSALS_AUTO 0x0F 42 #define SI1145_GET_CAL 0x12 43 44 /* Parameters */ 45 #define SI1145_PARAM_I2CADDR 0x00 46 #define SI1145_PARAM_CHLIST 0x01 47 #define SI1145_PARAM_CHLIST_ENUV 0x80 48 #define SI1145_PARAM_CHLIST_ENAUX 0x40 49 #define SI1145_PARAM_CHLIST_ENALSIR 0x20 50 #define SI1145_PARAM_CHLIST_ENALSVIS 0x10 51 #define SI1145_PARAM_CHLIST_ENPS1 0x01 52 #define SI1145_PARAM_CHLIST_ENPS2 0x02 53 #define SI1145_PARAM_CHLIST_ENPS3 0x04 54 55 #define SI1145_PARAM_PSLED12SEL 0x02 56 #define SI1145_PARAM_PSLED12SEL_PS2NONE 0x00 57 #define SI1145_PARAM_PSLED12SEL_PS2LED1 0x10 58 #define SI1145_PARAM_PSLED12SEL_PS2LED2 0x20 59 #define SI1145_PARAM_PSLED12SEL_PS2LED3 0x40 60 #define SI1145_PARAM_PSLED12SEL_PS1NONE 0x00 61 #define SI1145_PARAM_PSLED12SEL_PS1LED1 0x01 62 #define SI1145_PARAM_PSLED12SEL_PS1LED2 0x02 63 #define SI1145_PARAM_PSLED12SEL_PS1LED3 0x04 64 65 #define SI1145_PARAM_PSLED3SEL 0x03 66 #define SI1145_PARAM_PSENCODE 0x05 67 #define SI1145_PARAM_ALSENCODE 0x06 68 69 #define SI1145_PARAM_PS1ADCMUX 0x07 70 #define SI1145_PARAM_PS2ADCMUX 0x08 71 #define SI1145_PARAM_PS3ADCMUX 0x09 72 #define SI1145_PARAM_PSADCOUNTER 0x0A 73 #define SI1145_PARAM_PSADCGAIN 0x0B 74 #define SI1145_PARAM_PSADCMISC 0x0C 75 #define SI1145_PARAM_PSADCMISC_RANGE 0x20 76 #define SI1145_PARAM_PSADCMISC_PSMODE 0x04 77 78 #define SI1145_PARAM_ALSIRADCMUX 0x0E 79 #define SI1145_PARAM_AUXADCMUX 0x0F 80 81 #define SI1145_PARAM_ALSVISADCOUNTER 0x10 82 #define SI1145_PARAM_ALSVISADCGAIN 0x11 83 #define SI1145_PARAM_ALSVISADCMISC 0x12 84 #define SI1145_PARAM_ALSVISADCMISC_VISRANGE 0x20 85 86 #define SI1145_PARAM_ALSIRADCOUNTER 0x1D 87 #define SI1145_PARAM_ALSIRADCGAIN 0x1E 88 #define SI1145_PARAM_ALSIRADCMISC 0x1F 89 #define SI1145_PARAM_ALSIRADCMISC_RANGE 0x20 90 91 #define SI1145_PARAM_ADCCOUNTER_511CLK 0x70 92 93 #define SI1145_PARAM_ADCMUX_SMALLIR 0x00 94 #define SI1145_PARAM_ADCMUX_LARGEIR 0x03 95 96 /* REGISTERS */ 97 #define SI1145_REG_PARTID 0x00 98 #define SI1145_REG_REVID 0x01 99 #define SI1145_REG_SEQID 0x02 100 101 #define SI1145_REG_INTCFG 0x03 102 #define SI1145_REG_INTCFG_INTOE 0x01 103 #define SI1145_REG_INTCFG_INTMODE 0x02 104 105 #define SI1145_REG_IRQEN 0x04 106 #define SI1145_REG_IRQEN_ALSEVERYSAMPLE 0x01 107 #define SI1145_REG_IRQEN_PS1EVERYSAMPLE 0x04 108 #define SI1145_REG_IRQEN_PS2EVERYSAMPLE 0x08 109 #define SI1145_REG_IRQEN_PS3EVERYSAMPLE 0x10 110 111 #define SI1145_REG_IRQMODE1 0x05 112 #define SI1145_REG_IRQMODE2 0x06 113 114 #define SI1145_REG_HWKEY 0x07 115 #define SI1145_REG_MEASRATE0 0x08 116 #define SI1145_REG_MEASRATE1 0x09 117 #define SI1145_REG_PSRATE 0x0A 118 #define SI1145_REG_PSLED21 0x0F 119 #define SI1145_REG_PSLED3 0x10 120 #define SI1145_REG_UCOEFF0 0x13 121 #define SI1145_REG_UCOEFF1 0x14 122 #define SI1145_REG_UCOEFF2 0x15 123 #define SI1145_REG_UCOEFF3 0x16 124 #define SI1145_REG_PARAMWR 0x17 125 #define SI1145_REG_COMMAND 0x18 126 #define SI1145_REG_RESPONSE 0x20 127 #define SI1145_REG_IRQSTAT 0x21 128 #define SI1145_REG_IRQSTAT_ALS 0x01 129 130 #define SI1145_REG_ALSVISDATA0 0x22 131 #define SI1145_REG_ALSVISDATA1 0x23 132 #define SI1145_REG_ALSIRDATA0 0x24 133 #define SI1145_REG_ALSIRDATA1 0x25 134 #define SI1145_REG_PS1DATA0 0x26 135 #define SI1145_REG_PS1DATA1 0x27 136 #define SI1145_REG_PS2DATA0 0x28 137 #define SI1145_REG_PS2DATA1 0x29 138 #define SI1145_REG_PS3DATA0 0x2A 139 #define SI1145_REG_PS3DATA1 0x2B 140 #define SI1145_REG_UVINDEX0 0x2C 141 #define SI1145_REG_UVINDEX1 0x2D 142 #define SI1145_REG_PARAMRD 0x2E 143 #define SI1145_REG_CHIPSTAT 0x30 144 145 #define SI1145_ADDR 0x60 146 /** 147 * @brief Library for using the Si1145 UV/IR/Visible Light Sensor 148 * 149 */ 150 class Adafruit_SI1145 { 151 public: 152 Adafruit_SI1145(void); 153 ~Adafruit_SI1145(); 154 boolean begin(uint8_t addr = SI1145_ADDR, TwoWire *pBus = &Wire); 155 boolean begin(TwoWire *pBus); 156 void reset(); 157 158 uint16_t readUV(); 159 uint16_t readIR(); 160 uint16_t readVisible(); 161 uint16_t readProx(); 162 163 private: 164 uint16_t read16(uint8_t addr); 165 uint8_t read8(uint8_t addr); 166 void write8(uint8_t reg, uint8_t val); 167 uint8_t readParam(uint8_t p); 168 uint8_t writeParam(uint8_t p, uint8_t v); 169 Adafruit_I2CDevice *i2c_dev = NULL; ///< Pointer to I2C bus interface 170 }; 171 #endif