VCNL4020, Fully Integrated Proximity and Ambient Light Sensor with Infrared Emitter, I2C Interface, and Interrupt Function

Dependents:   testVCNL4020 testSensor

Committer:
Rhyme
Date:
Sat Apr 29 07:09:26 2017 +0000
Revision:
1:4f4cdaf51fc2
Parent:
0:95952f8fe2b4
Some bad comment formats fixed

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Rhyme 0:95952f8fe2b4 1 #ifndef _VCNL4020_H_
Rhyme 0:95952f8fe2b4 2 #define _VCNL4020_H_
Rhyme 0:95952f8fe2b4 3 /**
Rhyme 0:95952f8fe2b4 4 * VCNL4020
Rhyme 0:95952f8fe2b4 5 * Vishay VCNL4020 Fully Integrated Proximity
Rhyme 0:95952f8fe2b4 6 * and Ambient Light Sensor with Infrared Emitter,
Rhyme 0:95952f8fe2b4 7 * I2C Interface, and Interrupt Function
Rhyme 0:95952f8fe2b4 8 *
Rhyme 0:95952f8fe2b4 9 * @code
Rhyme 0:95952f8fe2b4 10 #include "mbed.h"
Rhyme 0:95952f8fe2b4 11 #include "VCNL4020.h"
Rhyme 0:95952f8fe2b4 12 #define MSU_VCNL4020_I2C_ADDRESS (0x13)
Rhyme 0:95952f8fe2b4 13
Rhyme 0:95952f8fe2b4 14 #if defined (TARGET_KL25Z)
Rhyme 0:95952f8fe2b4 15 #define PIN_SCL PTE1
Rhyme 0:95952f8fe2b4 16 #define PIN_SDA PTE0
Rhyme 0:95952f8fe2b4 17 #elif defined (TARGET_KL46Z)
Rhyme 0:95952f8fe2b4 18 #define PIN_SCL PTE1
Rhyme 0:95952f8fe2b4 19 #define PIN_SDA PTE0
Rhyme 0:95952f8fe2b4 20 #elif defined (TARGET_K64F)
Rhyme 0:95952f8fe2b4 21 #define PIN_SCL PTE24
Rhyme 0:95952f8fe2b4 22 #define PIN_SDA PTE25
Rhyme 0:95952f8fe2b4 23 #elif defined (TARGET_K22F)
Rhyme 0:95952f8fe2b4 24 #define PIN_SCL PTE1
Rhyme 0:95952f8fe2b4 25 #define PIN_SDA PTE0
Rhyme 0:95952f8fe2b4 26 #elif defined (TARGET_KL05Z)
Rhyme 0:95952f8fe2b4 27 #define PIN_SCL PTB3
Rhyme 0:95952f8fe2b4 28 #define PIN_SDA PTB4
Rhyme 0:95952f8fe2b4 29 #elif defined (TARGET_NUCLEO_F411RE)
Rhyme 0:95952f8fe2b4 30 #define PIN_SCL PB_8
Rhyme 0:95952f8fe2b4 31 #define PIN_SDA PB_9
Rhyme 0:95952f8fe2b4 32 #else
Rhyme 0:95952f8fe2b4 33 #error TARGET NOT DEFINED
Rhyme 0:95952f8fe2b4 34 #endif
Rhyme 0:95952f8fe2b4 35
Rhyme 0:95952f8fe2b4 36 #ifndef MSU_VCNL4020_I2C_ADDRESS
Rhyme 0:95952f8fe2b4 37 #define MSU_VCNL4020_I2C_ADDRESS 0x13
Rhyme 0:95952f8fe2b4 38 #endif
Rhyme 0:95952f8fe2b4 39
Rhyme 0:95952f8fe2b4 40 VCNL4020 *vcnl4020 = 0 ;
Rhyme 0:95952f8fe2b4 41
Rhyme 0:95952f8fe2b4 42 int main() {
Rhyme 0:95952f8fe2b4 43 uint16_t als, prox ;
Rhyme 0:95952f8fe2b4 44
Rhyme 0:95952f8fe2b4 45 vcnl4020 = new VCNL4020(PIN_SDA, PIN_SCL, MSU_VCNL4020_I2C_ADDRESS) ;
Rhyme 0:95952f8fe2b4 46 vcnl4020->setIrLedCurrent(1) ; // 10mA for LED
Rhyme 0:95952f8fe2b4 47 vcnl4020->disableAlsPeriodic() ;
Rhyme 0:95952f8fe2b4 48 vcnl4020->disableProxPeriodic() ;
Rhyme 0:95952f8fe2b4 49 vcnl4020->disableSelfTimed() ;
Rhyme 0:95952f8fe2b4 50
Rhyme 0:95952f8fe2b4 51 printf("=== test VCNL4020 %s ===\n", __DATE__) ;
Rhyme 0:95952f8fe2b4 52 printf("Product ID = %d, Revision = %d\n",
Rhyme 0:95952f8fe2b4 53 vcnl4020->getProdID(),
Rhyme 0:95952f8fe2b4 54 vcnl4020->getRevID()) ;
Rhyme 0:95952f8fe2b4 55
Rhyme 0:95952f8fe2b4 56 while(1) {
Rhyme 0:95952f8fe2b4 57 vcnl4020->trigBothOd() ; // trigger both ALS and PROX
Rhyme 0:95952f8fe2b4 58 while(vcnl4020->alsDataReady() == 0) {
Rhyme 0:95952f8fe2b4 59 // wait for ambient light data ready
Rhyme 0:95952f8fe2b4 60 }
Rhyme 0:95952f8fe2b4 61 als = vcnl4020->getAls() ;
Rhyme 0:95952f8fe2b4 62 while(vcnl4020->proxDataReady() == 0) {
Rhyme 0:95952f8fe2b4 63 // wait for proximate data ready
Rhyme 0:95952f8fe2b4 64 }
Rhyme 0:95952f8fe2b4 65 prox = vcnl4020->getProx() ;
Rhyme 0:95952f8fe2b4 66 printf("VCNL4020 Ambient Light: %d Proximity: %d\n", als, prox) ;
Rhyme 0:95952f8fe2b4 67
Rhyme 0:95952f8fe2b4 68 wait(1) ;
Rhyme 0:95952f8fe2b4 69 }
Rhyme 0:95952f8fe2b4 70 }
Rhyme 0:95952f8fe2b4 71 * @endcode
Rhyme 0:95952f8fe2b4 72 */
Rhyme 0:95952f8fe2b4 73 class VCNL4020
Rhyme 0:95952f8fe2b4 74 {
Rhyme 0:95952f8fe2b4 75 public:
Rhyme 0:95952f8fe2b4 76 /**
Rhyme 0:95952f8fe2b4 77 * VCNL4020 constructor
Rhyme 0:95952f8fe2b4 78 *
Rhyme 0:95952f8fe2b4 79 * @param sda SDA pin
Rhyme 0:95952f8fe2b4 80 * @param sdl SCL pin
Rhyme 0:95952f8fe2b4 81 * @param addr addr of the I2C peripheral
Rhyme 0:95952f8fe2b4 82 */
Rhyme 0:95952f8fe2b4 83 VCNL4020(PinName sda, PinName scl, int addr);
Rhyme 0:95952f8fe2b4 84
Rhyme 0:95952f8fe2b4 85 /**
Rhyme 0:95952f8fe2b4 86 * VCNL4020 destructor
Rhyme 0:95952f8fe2b4 87 */
Rhyme 0:95952f8fe2b4 88 ~VCNL4020();
Rhyme 0:95952f8fe2b4 89
Rhyme 0:95952f8fe2b4 90 uint8_t getCommandReg(void) ;
Rhyme 0:95952f8fe2b4 91 void setCommandReg(uint8_t cmd) ;
Rhyme 0:95952f8fe2b4 92 uint8_t getConfigLock(void) ;
Rhyme 0:95952f8fe2b4 93 void setConfigLock(void) ;
Rhyme 0:95952f8fe2b4 94 void clearConfigLock(void) ;
Rhyme 0:95952f8fe2b4 95 uint8_t alsDataReady(void) ;
Rhyme 0:95952f8fe2b4 96 uint16_t getAls(void) ;
Rhyme 0:95952f8fe2b4 97 uint8_t proxDataReady(void) ;
Rhyme 0:95952f8fe2b4 98 uint16_t getProx(void) ;
Rhyme 0:95952f8fe2b4 99 void trigAlsOd(void) ;
Rhyme 0:95952f8fe2b4 100 void trigProxOd(void) ;
Rhyme 0:95952f8fe2b4 101 void trigBothOd(void) ;
Rhyme 0:95952f8fe2b4 102 uint8_t getAlsPeriodicEnable(void) ;
Rhyme 0:95952f8fe2b4 103 void enableAlsPeriodic(void) ;
Rhyme 0:95952f8fe2b4 104 void disableAlsPeriodic(void) ;
Rhyme 0:95952f8fe2b4 105 uint8_t getProxPeriodicEnable(void) ;
Rhyme 0:95952f8fe2b4 106 void enableProxPeriodic(void) ;
Rhyme 0:95952f8fe2b4 107 void disableProxPeriodic(void) ;
Rhyme 0:95952f8fe2b4 108 uint8_t getSelfTimedEnable(void) ;
Rhyme 0:95952f8fe2b4 109 void enableSelfTimed(void) ;
Rhyme 0:95952f8fe2b4 110 void disableSelfTimed(void) ;
Rhyme 0:95952f8fe2b4 111 uint8_t getFuseProgID(void) ;
Rhyme 0:95952f8fe2b4 112 uint8_t getIrLedCurrent(void) ;
Rhyme 0:95952f8fe2b4 113 void setIrLedCurrent(uint8_t value) ;
Rhyme 0:95952f8fe2b4 114 uint8_t getIntControl(void) ;
Rhyme 0:95952f8fe2b4 115 void setIntControl(uint8_t ctrl) ;
Rhyme 0:95952f8fe2b4 116 uint16_t getLowThreshold(void) ;
Rhyme 0:95952f8fe2b4 117 void setLowThreshold(uint16_t thr) ;
Rhyme 0:95952f8fe2b4 118 uint16_t getHighThreshold(void) ;
Rhyme 0:95952f8fe2b4 119 void setHighThreshold(uint16_t thr) ;
Rhyme 0:95952f8fe2b4 120 uint8_t getIntStatus(void) ;
Rhyme 0:95952f8fe2b4 121 uint8_t getProxModTiming(void) ;
Rhyme 0:95952f8fe2b4 122 void setProxModTiming(uint8_t pmta) ;
Rhyme 0:95952f8fe2b4 123 uint8_t getProxRate(void) ;
Rhyme 0:95952f8fe2b4 124 void setProxRate(uint8_t rate) ;
Rhyme 0:95952f8fe2b4 125 uint8_t getProdID(void) ;
Rhyme 0:95952f8fe2b4 126 uint8_t getRevID(void) ;
Rhyme 0:95952f8fe2b4 127 uint16_t getALS(void) ;
Rhyme 0:95952f8fe2b4 128
Rhyme 0:95952f8fe2b4 129 private:
Rhyme 0:95952f8fe2b4 130 I2C m_i2c;
Rhyme 0:95952f8fe2b4 131 int m_addr;
Rhyme 0:95952f8fe2b4 132 void readRegs(int addr, uint8_t * data, int len);
Rhyme 0:95952f8fe2b4 133 void writeRegs(uint8_t * data, int len);
Rhyme 0:95952f8fe2b4 134
Rhyme 0:95952f8fe2b4 135 };
Rhyme 0:95952f8fe2b4 136
Rhyme 0:95952f8fe2b4 137 #endif /* _VCNL4020_H_ */