40
40
41
41
from micropython import const
42
42
43
+ try :
44
+ from typing_extensions import Literal
45
+ from busio import I2C , SPI
46
+ except ImportError :
47
+ pass
48
+
49
+
43
50
__version__ = "0.0.0+auto.0"
44
51
__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_LIS3DH.git"
45
52
@@ -93,7 +100,9 @@ class LIS3DH:
93
100
the LIS3DH INT2 interrupt pin
94
101
"""
95
102
96
- def __init__ (self , int1 = None , int2 = None ):
103
+ def __init__ (
104
+ self , int1 : digitalio .DigitalInOut = None , int2 : digitalio .DigitalInOut = None
105
+ ) -> None :
97
106
# Check device ID.
98
107
device_id = self ._read_register_byte (_REG_WHOAMI )
99
108
if device_id != 0x33 :
@@ -120,7 +129,11 @@ def __init__(self, int1=None, int2=None):
120
129
self ._int1 .pull = digitalio .Pull .UP
121
130
122
131
@property
123
- def data_rate (self ):
132
+ def data_rate (
133
+ self ,
134
+ ) -> Literal [
135
+ 0 , 0b0001 , 0b0010 , 0b0011 , 0b0100 , 0b0101 , 0b0110 , 0b0111 , 0b1000 , 0b1001
136
+ ]:
124
137
"""The data rate of the accelerometer.
125
138
126
139
Could have the following values:
@@ -141,14 +154,19 @@ def data_rate(self):
141
154
return (ctl1 >> 4 ) & 0x0F
142
155
143
156
@data_rate .setter
144
- def data_rate (self , rate ):
157
+ def data_rate (
158
+ self ,
159
+ rate : Literal [
160
+ 0 , 0b0001 , 0b0010 , 0b0011 , 0b0100 , 0b0101 , 0b0110 , 0b0111 , 0b1000 , 0b1001
161
+ ],
162
+ ):
145
163
ctl1 = self ._read_register_byte (_REG_CTRL1 )
146
164
ctl1 &= ~ (0xF0 )
147
165
ctl1 |= rate << 4
148
166
self ._write_register_byte (_REG_CTRL1 , ctl1 )
149
167
150
168
@property
151
- def range (self ):
169
+ def range (self ) -> Literal [ 0b00 , 0b01 , 0b10 , 0b11 ] :
152
170
"""The range of the accelerometer.
153
171
154
172
Could have the following values:
@@ -163,14 +181,14 @@ def range(self):
163
181
return (ctl4 >> 4 ) & 0x03
164
182
165
183
@range .setter
166
- def range (self , range_value ):
184
+ def range (self , range_value : Literal [ 0b00 , 0b01 , 0b10 , 0b11 ] ):
167
185
ctl4 = self ._read_register_byte (_REG_CTRL4 )
168
186
ctl4 &= ~ 0x30
169
187
ctl4 |= range_value << 4
170
188
self ._write_register_byte (_REG_CTRL4 , ctl4 )
171
189
172
190
@property
173
- def acceleration (self ):
191
+ def acceleration (self ) -> AccelerationTuple :
174
192
"""The x, y, z acceleration values returned
175
193
in a 3-tuple and are in :math:`m / s ^ 2`"""
176
194
divider = 1
@@ -193,7 +211,9 @@ def acceleration(self):
193
211
194
212
return AccelerationTuple (x , y , z )
195
213
196
- def shake (self , shake_threshold = 30 , avg_count = 10 , total_delay = 0.1 ):
214
+ def shake (
215
+ self , shake_threshold : int = 30 , avg_count : int = 10 , total_delay : float = 0.1
216
+ ) -> bool :
197
217
"""Detect when the accelerometer is shaken. Optional parameters:
198
218
199
219
:param int shake_threshold: Increase or decrease to change shake sensitivity.
@@ -226,7 +246,7 @@ def shake(self, shake_threshold=30, avg_count=10, total_delay=0.1):
226
246
total_accel = math .sqrt (sum (map (lambda x : x * x , avg )))
227
247
return total_accel > shake_threshold
228
248
229
- def read_adc_raw (self , adc ) :
249
+ def read_adc_raw (self , adc : Literal [ 1 , 2 , 3 ]) -> int :
230
250
"""Retrieve the raw analog to digital converter value. ADC must be a
231
251
value 1, 2, or 3.
232
252
"""
@@ -237,7 +257,8 @@ def read_adc_raw(self, adc):
237
257
"<h" , self ._read_register ((_REG_OUTADC1_L + ((adc - 1 ) * 2 )) | 0x80 , 2 )[0 :2 ]
238
258
)[0 ]
239
259
240
- def read_adc_mV (self , adc ): # pylint: disable=invalid-name
260
+ # pylint: disable=invalid-name
261
+ def read_adc_mV (self , adc : Literal [1 , 2 , 3 ]) -> float :
241
262
"""Read the specified analog to digital converter value in millivolts.
242
263
ADC must be a value 1, 2, or 3. NOTE the ADC can only measure voltages
243
264
in the range of ~900-1200mV!
@@ -256,7 +277,7 @@ def read_adc_mV(self, adc): # pylint: disable=invalid-name
256
277
return 1800 + (raw + 32512 ) * (- 900 / 65024 )
257
278
258
279
@property
259
- def tapped (self ):
280
+ def tapped (self ) -> int :
260
281
"""
261
282
True if a tap was detected recently. Whether its a single tap or double tap is
262
283
determined by the tap param on :attr:`set_tap`. :attr:`tapped` may be True over
@@ -284,14 +305,14 @@ def tapped(self):
284
305
285
306
def set_tap (
286
307
self ,
287
- tap ,
288
- threshold ,
308
+ tap : Literal [ 0 , 1 , 2 ] ,
309
+ threshold : int ,
289
310
* ,
290
- time_limit = 10 ,
291
- time_latency = 20 ,
292
- time_window = 255 ,
293
- click_cfg = None
294
- ):
311
+ time_limit : int = 10 ,
312
+ time_latency : int = 20 ,
313
+ time_window : int = 255 ,
314
+ click_cfg : int = None
315
+ ) -> None :
295
316
"""
296
317
The tap detection parameters.
297
318
@@ -338,17 +359,17 @@ def set_tap(
338
359
self ._write_register_byte (_REG_TIMELATENCY , time_latency )
339
360
self ._write_register_byte (_REG_TIMEWINDOW , time_window )
340
361
341
- def _read_register_byte (self , register ) :
362
+ def _read_register_byte (self , register : int ) -> int :
342
363
# Read a byte register value and return it.
343
364
return self ._read_register (register , 1 )[0 ]
344
365
345
- def _read_register (self , register , length ) :
366
+ def _read_register (self , register : int , length : int ) -> None :
346
367
# Read an arbitrarily long register (specified by length number of
347
368
# bytes) and return a bytearray of the retrieved data.
348
369
# Subclasses MUST implement this!
349
370
raise NotImplementedError
350
371
351
- def _write_register_byte (self , register , value ) :
372
+ def _write_register_byte (self , register : int , value : int ) -> None :
352
373
# Write a single byte register at the specified register address.
353
374
# Subclasses MUST implement this!
354
375
raise NotImplementedError
@@ -387,7 +408,14 @@ class LIS3DH_I2C(LIS3DH):
387
408
388
409
"""
389
410
390
- def __init__ (self , i2c , * , address = 0x18 , int1 = None , int2 = None ):
411
+ def __init__ (
412
+ self ,
413
+ i2c : I2C ,
414
+ * ,
415
+ address : int = 0x18 ,
416
+ int1 : digitalio .DigitalInOut = None ,
417
+ int2 : digitalio .DigitalInOut = None
418
+ ) -> None :
391
419
from adafruit_bus_device import ( # pylint: disable=import-outside-toplevel
392
420
i2c_device ,
393
421
)
@@ -396,14 +424,14 @@ def __init__(self, i2c, *, address=0x18, int1=None, int2=None):
396
424
self ._buffer = bytearray (6 )
397
425
super ().__init__ (int1 = int1 , int2 = int2 )
398
426
399
- def _read_register (self , register , length ) :
427
+ def _read_register (self , register : int , length : int ) -> bytearray :
400
428
self ._buffer [0 ] = register & 0xFF
401
429
with self ._i2c as i2c :
402
430
i2c .write (self ._buffer , start = 0 , end = 1 )
403
431
i2c .readinto (self ._buffer , start = 0 , end = length )
404
432
return self ._buffer
405
433
406
- def _write_register_byte (self , register , value ) :
434
+ def _write_register_byte (self , register : int , value : int ) -> None :
407
435
self ._buffer [0 ] = register & 0xFF
408
436
self ._buffer [1 ] = value & 0xFF
409
437
with self ._i2c as i2c :
@@ -442,7 +470,15 @@ class LIS3DH_SPI(LIS3DH):
442
470
443
471
"""
444
472
445
- def __init__ (self , spi , cs , * , baudrate = 100000 , int1 = None , int2 = None ):
473
+ def __init__ (
474
+ self ,
475
+ spi : SPI ,
476
+ cs : digitalio .DigitalInOut ,
477
+ * ,
478
+ baudrate : int = 100000 ,
479
+ int1 : digitalio .DigitalInOut = None ,
480
+ int2 : digitalio .DigitalInOut = None
481
+ ) -> None :
446
482
from adafruit_bus_device import ( # pylint: disable=import-outside-toplevel
447
483
spi_device ,
448
484
)
@@ -451,7 +487,7 @@ def __init__(self, spi, cs, *, baudrate=100000, int1=None, int2=None):
451
487
self ._buffer = bytearray (6 )
452
488
super ().__init__ (int1 = int1 , int2 = int2 )
453
489
454
- def _read_register (self , register , length ) :
490
+ def _read_register (self , register : int , length : int ) -> bytearray :
455
491
if length == 1 :
456
492
self ._buffer [0 ] = (register | 0x80 ) & 0xFF # Read single, bit 7 high.
457
493
else :
@@ -461,7 +497,7 @@ def _read_register(self, register, length):
461
497
spi .readinto (self ._buffer , start = 0 , end = length ) # pylint: disable=no-member
462
498
return self ._buffer
463
499
464
- def _write_register_byte (self , register , value ) :
500
+ def _write_register_byte (self , register : int , value : int ) -> None :
465
501
self ._buffer [0 ] = register & 0x7F # Write, bit 7 low.
466
502
self ._buffer [1 ] = value & 0xFF
467
503
with self ._spi as spi :
0 commit comments