@@ -150,16 +150,20 @@ class Adafruit_VCNL4200:
150
150
als_persistance = RWBits (2 , _ALS_CONF , 2 ) # ALS persistence bits
151
151
als_low_threshold = UnaryStruct (_ALS_THDL , "<H" )
152
152
als_high_threshold = UnaryStruct (_ALS_THDH , "<H" )
153
- prox_shutdown = RWBit (_PS_CONF12 , 0 ) # Bit 0: PS_SD (Proximity Sensor Shutdown)
153
+ prox_active_force = RWBit (_PS_CONF3MS , 3 )
154
+ prox_duty = RWBits (2 , _PS_CONF12 , 6 )
155
+ prox_hd = RWBit (_PS_CONF12 , 11 )
154
156
prox_integration_time = RWBits (3 , _PS_CONF12 , 1 )
157
+ prox_interrupt = RWBits (2 , _PS_CONF12 , 8 )
158
+ prox_persistence = RWBits (2 , _PS_CONF12 , 4 )
159
+ prox_shutdown = RWBit (_PS_CONF12 , 0 ) # Bit 0: PS_SD (Proximity Sensor Shutdown)
155
160
proximity = ROUnaryStruct (_PS_DATA , "<H" )
156
161
lux = ROUnaryStruct (_ALS_DATA , "<H" )
157
162
white_light = ROUnaryStruct (_WHITE_DATA , "<H" ) # 16-bit register for white light data
158
163
_als_int_en = RWBits (1 , _ALS_CONF , 1 ) # Bit 1: ALS interrupt enable
159
164
_als_int_switch = RWBits (1 , _ALS_CONF , 5 ) # Bit 5: ALS interrupt channel selection (white/ALS)
160
- _proximity_int_en = RWBits (
161
- 1 , _PS_CONF12 , 0
162
- ) # Bit 0 in proximity config register for proximity interrupt enable
165
+ _proximity_int_en = RWBits (1 , _PS_CONF12 , 0 )
166
+ _prox_trigger = RWBit (_PS_CONF3MS , 2 )
163
167
164
168
def __init__ (self , i2c : I2C , addr : int = _I2C_ADDRESS ) -> None :
165
169
self .i2c_device = I2CDevice (i2c , addr )
@@ -181,8 +185,10 @@ def __init__(self, i2c: I2C, addr: int = _I2C_ADDRESS) -> None:
181
185
self .als_low_threshold = 0
182
186
self .als_high_threshold = 0xFFFF
183
187
self .set_interrupt (enabled = False , white_channel = False )
188
+ self .prox_duty = PS_DUTY ["1_160" ]
184
189
self .prox_shutdown = False
185
190
self .prox_integration_time = PS_IT ["1T" ]
191
+ self .prox_persistence = PS_PERS ["1" ]
186
192
except Exception as error :
187
193
raise RuntimeError (f"Failed to initialize: { error } " ) from error
188
194
@@ -195,3 +201,11 @@ def set_interrupt(self, enabled, white_channel):
195
201
return True
196
202
except OSError :
197
203
return False
204
+
205
+ def trigger_prox (self ):
206
+ """Triggers a single proximity measurement manually in active force mode."""
207
+ try :
208
+ self ._prox_trigger = True
209
+ return True
210
+ except OSError :
211
+ return False
0 commit comments