Skip to content

Commit aaec802

Browse files
committed
apds9960 : adaptation of the driver from https://github.com/liske/python-apds9960
1 parent 2ffaa2b commit aaec802

10 files changed

Lines changed: 2059 additions & 21 deletions

File tree

LICENSE

Lines changed: 674 additions & 21 deletions
Large diffs are not rendered by default.

lib/apds9960/README.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# MicroPython APDS-9960 Library
2+
3+
This library is a port of the [Python (and MicroPython) APDS-9960 Library](https://github.com/liske/python-apds9960/).
4+
5+
The examples could be easily tested with [mpremote](https://docs.micropython.org/en/latest/reference/mpremote.html) with the following command :
6+
7+
```sh
8+
mpremote mount . run examples/ambient_light.py
9+
```

lib/apds9960/apds9960/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from apds9960.device import APDS9960, uAPDS9960
2+
3+
__all__ = [ 'APDS9960', 'uAPDS9960', ]

lib/apds9960/apds9960/const.py

Lines changed: 176 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,176 @@
1+
# APDS9960 i2c address
2+
APDS9960_I2C_ADDR = 0x39
3+
4+
# APDS9960 gesture parameters
5+
APDS9960_GESTURE_THRESHOLD_OUT = 10
6+
APDS9960_GESTURE_SENSITIVITY_1 = 50
7+
APDS9960_GESTURE_SENSITIVITY_2 = 20
8+
9+
# APDS9960 device IDs
10+
APDS9960_DEV_ID = [0xab, 0x9c, 0xa8, -0x55]
11+
12+
# APDS9960 times
13+
APDS9960_TIME_FIFO_PAUSE = 0.03
14+
15+
# APDS9960 register addresses
16+
APDS9960_REG_ENABLE = 0x80
17+
APDS9960_REG_ATIME = 0x81
18+
APDS9960_REG_WTIME = 0x83
19+
APDS9960_REG_AILTL = 0x84
20+
APDS9960_REG_AILTH = 0x85
21+
APDS9960_REG_AIHTL = 0x86
22+
APDS9960_REG_AIHTH = 0x87
23+
APDS9960_REG_PILT = 0x89
24+
APDS9960_REG_PIHT = 0x8b
25+
APDS9960_REG_PERS = 0x8c
26+
APDS9960_REG_CONFIG1 = 0x8d
27+
APDS9960_REG_PPULSE = 0x8e
28+
APDS9960_REG_CONTROL = 0x8f
29+
APDS9960_REG_CONFIG2 = 0x90
30+
APDS9960_REG_ID = 0x92
31+
APDS9960_REG_STATUS = 0x93
32+
APDS9960_REG_CDATAL = 0x94
33+
APDS9960_REG_CDATAH = 0x95
34+
APDS9960_REG_RDATAL = 0x96
35+
APDS9960_REG_RDATAH = 0x97
36+
APDS9960_REG_GDATAL = 0x98
37+
APDS9960_REG_GDATAH = 0x99
38+
APDS9960_REG_BDATAL = 0x9a
39+
APDS9960_REG_BDATAH = 0x9b
40+
APDS9960_REG_PDATA = 0x9c
41+
APDS9960_REG_POFFSET_UR = 0x9d
42+
APDS9960_REG_POFFSET_DL = 0x9e
43+
APDS9960_REG_CONFIG3 = 0x9f
44+
APDS9960_REG_GPENTH = 0xa0
45+
APDS9960_REG_GEXTH = 0xa1
46+
APDS9960_REG_GCONF1 = 0xa2
47+
APDS9960_REG_GCONF2 = 0xa3
48+
APDS9960_REG_GOFFSET_U = 0xa4
49+
APDS9960_REG_GOFFSET_D = 0xa5
50+
APDS9960_REG_GOFFSET_L = 0xa7
51+
APDS9960_REG_GOFFSET_R = 0xa9
52+
APDS9960_REG_GPULSE = 0xa6
53+
APDS9960_REG_GCONF3 = 0xaA
54+
APDS9960_REG_GCONF4 = 0xaB
55+
APDS9960_REG_GFLVL = 0xae
56+
APDS9960_REG_GSTATUS = 0xaf
57+
APDS9960_REG_IFORCE = 0xe4
58+
APDS9960_REG_PICLEAR = 0xe5
59+
APDS9960_REG_CICLEAR = 0xe6
60+
APDS9960_REG_AICLEAR = 0xe7
61+
APDS9960_REG_GFIFO_U = 0xfc
62+
APDS9960_REG_GFIFO_D = 0xfd
63+
APDS9960_REG_GFIFO_L = 0xfe
64+
APDS9960_REG_GFIFO_R = 0xff
65+
66+
# APDS9960 bit fields
67+
APDS9960_BIT_PON = 0b00000001
68+
APDS9960_BIT_AEN = 0b00000010
69+
APDS9960_BIT_PEN = 0b00000100
70+
APDS9960_BIT_WEN = 0b00001000
71+
APSD9960_BIT_AIEN =0b00010000
72+
APDS9960_BIT_PIEN = 0b00100000
73+
APDS9960_BIT_GEN = 0b01000000
74+
APDS9960_BIT_GVALID = 0b00000001
75+
APDS9960_BIT_AVALID = 0b00000001
76+
APDS9960_BIT_PVALID = 0b00000010
77+
APDS9960_BIT_GINT = 0b00000100
78+
APDS9960_BIT_AINT = 0b00010000
79+
APDS9960_BIT_PINT = 0b00100000
80+
APDS9960_BIT_PGSAT = 0b01000000
81+
APDS9960_BIT_CPSAT = 0b10000000
82+
83+
# APDS9960 modes
84+
APDS9960_MODE_POWER = 0
85+
APDS9960_MODE_AMBIENT_LIGHT = 1
86+
APDS9960_MODE_PROXIMITY = 2
87+
APDS9960_MODE_WAIT = 3
88+
APDS9960_MODE_AMBIENT_LIGHT_INT = 4
89+
APDS9960_MODE_PROXIMITY_INT = 5
90+
APDS9960_MODE_GESTURE = 6
91+
APDS9960_MODE_ALL = 7
92+
93+
# LED Drive values
94+
APDS9960_LED_DRIVE_100MA = 0
95+
APDS9960_LED_DRIVE_50MA = 1
96+
APDS9960_LED_DRIVE_25MA = 2
97+
APDS9960_LED_DRIVE_12_5MA = 3
98+
99+
# Proximity Gain (PGAIN) values
100+
APDS9960_PGAIN_1X = 0
101+
APDS9960_PGAIN_2X = 1
102+
APDS9960_PGAIN_4X = 2
103+
APDS9960_PGAIN_8X = 3
104+
105+
# ALS Gain (AGAIN) values
106+
APDS9960_AGAIN_1X = 0
107+
APDS9960_AGAIN_4X = 1
108+
APDS9960_AGAIN_16X = 2
109+
APDS9960_AGAIN_64X = 3
110+
111+
# Gesture Gain (GGAIN) values
112+
APDS9960_GGAIN_1X = 0
113+
APDS9960_GGAIN_2X = 1
114+
APDS9960_GGAIN_4X = 2
115+
APDS9960_GGAIN_8X = 3
116+
117+
# LED Boost values
118+
APDS9960_LED_BOOST_100 = 0
119+
APDS9960_LED_BOOST_150 = 1
120+
APDS9960_LED_BOOST_200 = 2
121+
APDS9960_LED_BOOST_300 = 3
122+
123+
# Gesture wait time values
124+
APDS9960_GWTIME_0MS = 0
125+
APDS9960_GWTIME_2_8MS = 1
126+
APDS9960_GWTIME_5_6MS = 2
127+
APDS9960_GWTIME_8_4MS = 3
128+
APDS9960_GWTIME_14_0MS = 4
129+
APDS9960_GWTIME_22_4MS = 5
130+
APDS9960_GWTIME_30_8MS = 6
131+
APDS9960_GWTIME_39_2MS = 7
132+
133+
# Default values
134+
APDS9960_DEFAULT_ATIME = 219 # 103ms
135+
APDS9960_DEFAULT_WTIME = 246 # 27ms
136+
APDS9960_DEFAULT_PROX_PPULSE = 0x87 # 16us, 8 pulses
137+
APDS9960_DEFAULT_GESTURE_PPULSE = 0x89 # 16us, 10 pulses
138+
APDS9960_DEFAULT_POFFSET_UR = 0 # 0 offset
139+
APDS9960_DEFAULT_POFFSET_DL = 0 # 0 offset
140+
APDS9960_DEFAULT_CONFIG1 = 0x60 # No 12x wait (WTIME) factor
141+
APDS9960_DEFAULT_LDRIVE = APDS9960_LED_DRIVE_100MA
142+
APDS9960_DEFAULT_PGAIN = APDS9960_PGAIN_4X
143+
APDS9960_DEFAULT_AGAIN = APDS9960_AGAIN_4X
144+
APDS9960_DEFAULT_PILT = 0 # Low proximity threshold
145+
APDS9960_DEFAULT_PIHT = 50 # High proximity threshold
146+
APDS9960_DEFAULT_AILT = 0xffff # Force interrupt for calibration
147+
APDS9960_DEFAULT_AIHT = 0
148+
APDS9960_DEFAULT_PERS = 0x11 # 2 consecutive prox or ALS for int.
149+
APDS9960_DEFAULT_CONFIG2 = 0x01 # No saturation interrupts or LED boost
150+
APDS9960_DEFAULT_CONFIG3 = 0 # Enable all photodiodes, no SAI
151+
APDS9960_DEFAULT_GPENTH = 40 # Threshold for entering gesture mode
152+
APDS9960_DEFAULT_GEXTH = 30 # Threshold for exiting gesture mode
153+
APDS9960_DEFAULT_GCONF1 = 0x40 # 4 gesture events for int., 1 for exit
154+
APDS9960_DEFAULT_GGAIN = APDS9960_GGAIN_4X
155+
APDS9960_DEFAULT_GLDRIVE = APDS9960_LED_DRIVE_100MA
156+
APDS9960_DEFAULT_GWTIME = APDS9960_GWTIME_2_8MS
157+
APDS9960_DEFAULT_GOFFSET = 0 # No offset scaling for gesture mode
158+
APDS9960_DEFAULT_GPULSE = 0xc9 # 32us, 10 pulses
159+
APDS9960_DEFAULT_GCONF3 = 0 # All photodiodes active during gesture
160+
APDS9960_DEFAULT_GIEN = 0 # Disable gesture interrupts
161+
162+
# gesture directions
163+
APDS9960_DIR_NONE = 0
164+
APDS9960_DIR_LEFT = 1
165+
APDS9960_DIR_RIGHT = 2
166+
APDS9960_DIR_UP = 3
167+
APDS9960_DIR_DOWN = 4
168+
APDS9960_DIR_NEAR = 5
169+
APDS9960_DIR_FAR = 6
170+
APDS9960_DIR_ALL = 7
171+
172+
# state definitions
173+
APDS9960_STATE_NA = 0
174+
APDS9960_STATE_NEAR = 1
175+
APDS9960_STATE_FAR = 2
176+
APDS9960_STATE_ALL = 3

0 commit comments

Comments
 (0)