VCNL4020, Fully Integrated Proximity and Ambient Light Sensor with Infrared Emitter, I2C Interface, and Interrupt Function
Dependents: testVCNL4020 testSensor
VCNL4020.h
- Committer:
- Rhyme
- Date:
- 2017-04-29
- Revision:
- 1:4f4cdaf51fc2
- Parent:
- 0:95952f8fe2b4
File content as of revision 1:4f4cdaf51fc2:
#ifndef _VCNL4020_H_ #define _VCNL4020_H_ /** * VCNL4020 * Vishay VCNL4020 Fully Integrated Proximity * and Ambient Light Sensor with Infrared Emitter, * I2C Interface, and Interrupt Function * * @code #include "mbed.h" #include "VCNL4020.h" #define MSU_VCNL4020_I2C_ADDRESS (0x13) #if defined (TARGET_KL25Z) #define PIN_SCL PTE1 #define PIN_SDA PTE0 #elif defined (TARGET_KL46Z) #define PIN_SCL PTE1 #define PIN_SDA PTE0 #elif defined (TARGET_K64F) #define PIN_SCL PTE24 #define PIN_SDA PTE25 #elif defined (TARGET_K22F) #define PIN_SCL PTE1 #define PIN_SDA PTE0 #elif defined (TARGET_KL05Z) #define PIN_SCL PTB3 #define PIN_SDA PTB4 #elif defined (TARGET_NUCLEO_F411RE) #define PIN_SCL PB_8 #define PIN_SDA PB_9 #else #error TARGET NOT DEFINED #endif #ifndef MSU_VCNL4020_I2C_ADDRESS #define MSU_VCNL4020_I2C_ADDRESS 0x13 #endif VCNL4020 *vcnl4020 = 0 ; int main() { uint16_t als, prox ; vcnl4020 = new VCNL4020(PIN_SDA, PIN_SCL, MSU_VCNL4020_I2C_ADDRESS) ; vcnl4020->setIrLedCurrent(1) ; // 10mA for LED vcnl4020->disableAlsPeriodic() ; vcnl4020->disableProxPeriodic() ; vcnl4020->disableSelfTimed() ; printf("=== test VCNL4020 %s ===\n", __DATE__) ; printf("Product ID = %d, Revision = %d\n", vcnl4020->getProdID(), vcnl4020->getRevID()) ; while(1) { vcnl4020->trigBothOd() ; // trigger both ALS and PROX while(vcnl4020->alsDataReady() == 0) { // wait for ambient light data ready } als = vcnl4020->getAls() ; while(vcnl4020->proxDataReady() == 0) { // wait for proximate data ready } prox = vcnl4020->getProx() ; printf("VCNL4020 Ambient Light: %d Proximity: %d\n", als, prox) ; wait(1) ; } } * @endcode */ class VCNL4020 { public: /** * VCNL4020 constructor * * @param sda SDA pin * @param sdl SCL pin * @param addr addr of the I2C peripheral */ VCNL4020(PinName sda, PinName scl, int addr); /** * VCNL4020 destructor */ ~VCNL4020(); uint8_t getCommandReg(void) ; void setCommandReg(uint8_t cmd) ; uint8_t getConfigLock(void) ; void setConfigLock(void) ; void clearConfigLock(void) ; uint8_t alsDataReady(void) ; uint16_t getAls(void) ; uint8_t proxDataReady(void) ; uint16_t getProx(void) ; void trigAlsOd(void) ; void trigProxOd(void) ; void trigBothOd(void) ; uint8_t getAlsPeriodicEnable(void) ; void enableAlsPeriodic(void) ; void disableAlsPeriodic(void) ; uint8_t getProxPeriodicEnable(void) ; void enableProxPeriodic(void) ; void disableProxPeriodic(void) ; uint8_t getSelfTimedEnable(void) ; void enableSelfTimed(void) ; void disableSelfTimed(void) ; uint8_t getFuseProgID(void) ; uint8_t getIrLedCurrent(void) ; void setIrLedCurrent(uint8_t value) ; uint8_t getIntControl(void) ; void setIntControl(uint8_t ctrl) ; uint16_t getLowThreshold(void) ; void setLowThreshold(uint16_t thr) ; uint16_t getHighThreshold(void) ; void setHighThreshold(uint16_t thr) ; uint8_t getIntStatus(void) ; uint8_t getProxModTiming(void) ; void setProxModTiming(uint8_t pmta) ; uint8_t getProxRate(void) ; void setProxRate(uint8_t rate) ; uint8_t getProdID(void) ; uint8_t getRevID(void) ; uint16_t getALS(void) ; private: I2C m_i2c; int m_addr; void readRegs(int addr, uint8_t * data, int len); void writeRegs(uint8_t * data, int len); }; #endif /* _VCNL4020_H_ */