I develop vcnl4200 proximity sensor. When I read PROXIMITY_DATA (0x08), It always return 0 ~ 3 value. I thinks it is too small to get a distance.
Nothing = 0 Something in front of this = 1~3
I checked Ambient Light Sensor value. It looks good. 0~15000
Here is my code.
#define DEFAULT_I2C_ADDR (0x51)
#define REG_PS_THDH 0x07
#define REG_ALS_DATA 0x09
#define REG_PS_DATA 0x08
#define REG_ALS_CONF 0x00
#define REG_PS_CONF_1_2 0x03
#define REG_PS_CONF_3 0x04
#define VCNL4200_PS_CANC_REG 0x05
#define VCNL4200_PS_THDL_REG 0x06 //Proximity Sensor Threshold Data Low
#define VCNL4200_PS_THDH_REG 0x07 //Proximity Sensor Threshold Data High
#define REG_PS_INT 0x0D
#define DEFAULT_ALS_CONF 0b00000000
#define DEFAULT_PS_CONF1 0b11001010
#define DEFAULT_PS_CONF2 0b00001000
#define DEFAULT_PS_CONF3 0b01110001
#define DEFAULT_PS_MS 0b00000111
VCNL4200_configure_proximity_sensor(DEFAULT_PS_CONF1, DEFAULT_PS_CONF2);
VCNL4200_configure_proximity_sensor2(DEFAULT_PS_CONF3, DEFAULT_PS_MS);
VCNL4200_write_register(VCNL4200_PS_THDL_REG, 1000);
VCNL4200_write_register(VCNL4200_PS_THDH_REG, 5000);
while (1) {
interrupt = VCNL4200_read_int();
value = VCNL4200_get_distance();
DEBUG_PRINTF("Int: 0x%02X, Distance: %d\n", interrupt, value);
// value = VCNL4200_get_ambient_light();
// DEBUG_PRINTF("Light: %d\n", value);
}
What I'm missing? thanks to read.