/ 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