Proximity & Light Sensing¶
Proximity Examples¶
Examples that demostrates the use of apds9960 as a proximity sensor
Simple Example¶
Basic proximity test program.
1 2 3 4 5 6 7 8 9 10 11 12 13 | import machine
from time import sleep_ms
from uPy_APDS9960.apds9960LITE import APDS9960LITE
#Init I2C Buss
i2c = machine.I2C(scl=machine.Pin(5), sda=machine.Pin(4))
apds9960=APDS9960LITE(i2c) # Enable sensor
apds9960.prox.enableSensor() # Enable Proximit sensing
while True:
sleep_ms(25) # wait for readout to be ready
print(apds9960.prox.proximityLevel) #Print the proximity value
|
Regular Example¶
Example exposing more functions
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | import machine
from time import sleep_ms
from uPy_APDS9960.apds9960LITE import APDS9960LITE
# Proximity Gain (PGAIN) values
APDS9960_PGAIN_1X = const(0)
APDS9960_PGAIN_2X = const(1)
APDS9960_PGAIN_4X = const(2)
APDS9960_PGAIN_8X = const(3)
# LED Drive values
APDS9960_LED_DRIVE_100MA = const(0)
APDS9960_LED_DRIVE_50MA = const(1)
APDS9960_LED_DRIVE_25MA = const(2)
APDS9960_LED_DRIVE_12_5MA = const(3)
i2c = machine.I2C(scl=machine.Pin(5), sda=machine.Pin(4))
apds9960=APDS9960LITE(i2c)
apds9960.prox.eLEDCurrent =APDS9960_LED_DRIVE_100MA
apds9960.prox.eProximityGain=APDS9960_PGAIN_8X
apds9960.prox.enableSensor()
sleep_ms(50)
while True:
sleep_ms(50)
print("proximity:", apds9960.prox.proximityLevel )
|
Simple IRQ¶
Example showing use of a hardware IRQ raised at a given proximity value
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | import machine
from time import sleep_ms
from uPy_APDS9960.apds9960LITE import APDS9960LITE
i2c = machine.I2C(scl=machine.Pin(5), sda=machine.Pin(4))
apds9960=APDS9960LITE(i2c)
apds9960.prox.eLEDCurrent =0 # LED_DRIVE_100MA
apds9960.prox.eProximityGain =3 # PGAIN_8X
apds9960.prox.enableSensor()
#IRQ Functionalities
apds9960.prox.setInterruptThreshold(high=10,low=0,persistance=7)
apds9960.prox.enableInterrupt()
ProxThPin=machine.Pin(0, machine.Pin.IN ,machine.Pin.PULL_UP)
sleep_ms(50)
while True:
sleep_ms(50)
if(ProxThPin.value()==0):
print("proximity:", apds9960.prox.proximityLevel )
apds9960.prox.clearInterrupt()
|
IRQ Example¶
Example showing use of interrupts exposing more functionalities
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | import machine
from time import sleep_ms
from uPy_APDS9960.apds9960LITE import APDS9960LITE
# Proximity Gain (PGAIN) values
APDS9960_PGAIN_1X = const(0)
APDS9960_PGAIN_2X = const(1)
APDS9960_PGAIN_4X = const(2)
APDS9960_PGAIN_8X = const(3)
# LED Drive values
APDS9960_LED_DRIVE_100MA = const(0)
APDS9960_LED_DRIVE_50MA = const(1)
APDS9960_LED_DRIVE_25MA = const(2)
APDS9960_LED_DRIVE_12_5MA = const(3)
i2c = machine.I2C(scl=machine.Pin(5), sda=machine.Pin(4))
print("Lite APDS-9960 Proximity test ")
apds9960=APDS9960LITE(i2c)
apds9960.prox.eLEDCurrent =APDS9960_LED_DRIVE_100MA
apds9960.prox.eProximityGain=APDS9960_PGAIN_8X
apds9960.prox.enableSensor()
apds9960.prox.setInterruptThreshold(high=10,low=0,persistance=7)
apds9960.prox.enableInterrupt()
ProxThPin=machine.Pin(0, machine.Pin.IN ,machine.Pin.PULL_UP)
sleep_ms(50)
while True:
sleep_ms(50)
if(ProxThPin.value()==0):
print("proximity:", apds9960.prox.proximityLevel )
apds9960.prox.clearInterrupt()
|
Light Sensor Examples¶
Light sensing example¶
Ambient Light and RGB Color Sensing test program.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | import machine
from time import sleep_ms
from uPy_APDS9960.apdsS9960LITE import APDS9960LITE
#Init I2C Buss
i2c = machine.I2C(scl=machine.Pin(5), sda=machine.Pin(4))
apds9960=APDS9960LITE(i2c) # Enable sensor
print("Enable light Sensor")
apds9960.als.enableSensor() # Enable Light sensor
apds9960.als.eLightGain=3 # x64 gain
#apds9960.prox.enableProximity()
sleep_ms(50)
print("Clear Light level: ", apds9960.als.ambientLightLevel)
print("Red Light level: " , apds9960.als.redLightLevel)
print("Green Light level: ", apds9960.als.greenLightLevel)
print("Blue Light level: " , apds9960.als.blueLightLevel)
|
Ambient light IRQ¶
Ambient Light IRQ test program.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | import machine
from time import sleep_ms
from uPy_APDS9960.apds9960LITE import APDS9960LITE
#Init I2C Buss
i2c = machine.I2C(scl=machine.Pin(5), sda=machine.Pin(4))
apds9960=APDS9960LITE(i2c) # Enable sensor
apds9960.als.enableSensor() # Enable Light sensor
apds9960.als.eLightGain=3 # x64 gain
apds9960.als.setInterruptThreshold(high=100,low=0,persistance=7)
apds9960.als.enableInterrupt(True) # Enable interrupt
apds9960.als.clearInterrupt() # Clear interrupt
sleep_ms(50)
IrqThPin=machine.Pin(0, machine.Pin.IN ,machine.Pin.PULL_UP)
sleep_ms(50)
while True:
sleep_ms(50)
if(IrqThPin.value()==0):
print("Ambient light level:", apds9960.als.ambientLightLevel )
apds9960.als.clearInterrupt()
|
Debug¶
I2C Debug Example¶
Test program for testing the I2C connection the the aps9960
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import machine
i2c = machine.I2C(scl=machine.Pin(5), sda=machine.Pin(4))
print('Scan i2c bus...')
devices = i2c.scan()
if len(devices) == 0:
print("No i2c device !")
else:
print('i2c devices found:',len(devices))
for device in devices:
print("Decimal address: ",device," | Hexa address: ",hex(device))
if(device==0x39): # APDS9960 Address = 0x39
deviceID=i2c.readfrom_mem(devices[0],0x92, 1) #G et deviceID
print("Found ADPS9960: Device ID: ",deviceID)
|