42
42
__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_MMA8451.git"
43
43
44
44
45
- #pylint: disable=bad-whitespace
45
+ # pylint: disable=bad-whitespace
46
46
# Internal constants:
47
- _MMA8451_DEFAULT_ADDRESS = const (0x1D )
48
- _MMA8451_REG_OUT_X_MSB = const (0x01 )
49
- _MMA8451_REG_SYSMOD = const (0x0B )
50
- _MMA8451_REG_WHOAMI = const (0x0D )
51
- _MMA8451_REG_XYZ_DATA_CFG = const (0x0E )
52
- _MMA8451_REG_PL_STATUS = const (0x10 )
53
- _MMA8451_REG_PL_CFG = const (0x11 )
54
- _MMA8451_REG_CTRL_REG1 = const (0x2A )
55
- _MMA8451_REG_CTRL_REG2 = const (0x2B )
56
- _MMA8451_REG_CTRL_REG4 = const (0x2D )
57
- _MMA8451_REG_CTRL_REG5 = const (0x2E )
58
- _MMA8451_DATARATE_MASK = const (0b111 )
59
- _SENSORS_GRAVITY_EARTH = 9.80665
47
+ _MMA8451_DEFAULT_ADDRESS = const (0x1D )
48
+ _MMA8451_REG_OUT_X_MSB = const (0x01 )
49
+ _MMA8451_REG_SYSMOD = const (0x0B )
50
+ _MMA8451_REG_WHOAMI = const (0x0D )
51
+ _MMA8451_REG_XYZ_DATA_CFG = const (0x0E )
52
+ _MMA8451_REG_PL_STATUS = const (0x10 )
53
+ _MMA8451_REG_PL_CFG = const (0x11 )
54
+ _MMA8451_REG_CTRL_REG1 = const (0x2A )
55
+ _MMA8451_REG_CTRL_REG2 = const (0x2B )
56
+ _MMA8451_REG_CTRL_REG4 = const (0x2D )
57
+ _MMA8451_REG_CTRL_REG5 = const (0x2E )
58
+ _MMA8451_DATARATE_MASK = const (0b111 )
59
+ _SENSORS_GRAVITY_EARTH = 9.80665
60
60
61
61
# External user-facing constants:
62
- PL_PUF = 0 # Portrait, up, front
63
- PL_PUB = 1 # Portrait, up, back
64
- PL_PDF = 2 # Portrait, down, front
65
- PL_PDB = 3 # Portrait, down, back
66
- PL_LRF = 4 # Landscape, right, front
67
- PL_LRB = 5 # Landscape, right, back
68
- PL_LLF = 6 # Landscape, left, front
69
- PL_LLB = 7 # Landscape, left, back
70
- RANGE_8G = 0b10 # +/- 8g
71
- RANGE_4G = 0b01 # +/- 4g (default value)
72
- RANGE_2G = 0b00 # +/- 2g
73
- DATARATE_800HZ = 0b000 # 800Hz
74
- DATARATE_400HZ = 0b001 # 400Hz
75
- DATARATE_200HZ = 0b010 # 200Hz
76
- DATARATE_100HZ = 0b011 # 100Hz
77
- DATARATE_50HZ = 0b100 # 50Hz
78
- DATARATE_12_5HZ = 0b101 # 12.5Hz
79
- DATARATE_6_25HZ = 0b110 # 6.25Hz
80
- DATARATE_1_56HZ = 0b111 # 1.56Hz
81
- #pylint: enable=bad-whitespace
62
+ PL_PUF = 0 # Portrait, up, front
63
+ PL_PUB = 1 # Portrait, up, back
64
+ PL_PDF = 2 # Portrait, down, front
65
+ PL_PDB = 3 # Portrait, down, back
66
+ PL_LRF = 4 # Landscape, right, front
67
+ PL_LRB = 5 # Landscape, right, back
68
+ PL_LLF = 6 # Landscape, left, front
69
+ PL_LLB = 7 # Landscape, left, back
70
+ RANGE_8G = 0b10 # +/- 8g
71
+ RANGE_4G = 0b01 # +/- 4g (default value)
72
+ RANGE_2G = 0b00 # +/- 2g
73
+ DATARATE_800HZ = 0b000 # 800Hz
74
+ DATARATE_400HZ = 0b001 # 400Hz
75
+ DATARATE_200HZ = 0b010 # 200Hz
76
+ DATARATE_100HZ = 0b011 # 100Hz
77
+ DATARATE_50HZ = 0b100 # 50Hz
78
+ DATARATE_12_5HZ = 0b101 # 12.5Hz
79
+ DATARATE_6_25HZ = 0b110 # 6.25Hz
80
+ DATARATE_1_56HZ = 0b111 # 1.56Hz
81
+ # pylint: enable=bad-whitespace
82
82
83
83
84
84
class MMA8451 :
@@ -97,7 +97,7 @@ def __init__(self, i2c, *, address=_MMA8451_DEFAULT_ADDRESS):
97
97
self ._device = i2c_device .I2CDevice (i2c , address )
98
98
# Verify device ID.
99
99
if self ._read_u8 (_MMA8451_REG_WHOAMI ) != 0x1A :
100
- raise RuntimeError (' Failed to find MMA8451, check wiring!' )
100
+ raise RuntimeError (" Failed to find MMA8451, check wiring!" )
101
101
# Reset and wait for chip to be ready.
102
102
self ._write_u8 (_MMA8451_REG_CTRL_REG2 , 0x40 )
103
103
while self ._read_u8 (_MMA8451_REG_CTRL_REG2 ) & 0x40 > 0 :
@@ -122,12 +122,11 @@ def _read_into(self, address, buf, count=None):
122
122
# has at least 1 value. I don't trust the implicit true/false
123
123
# recommendation as it was not designed for bytearrays which may not
124
124
# follow that semantic. Ignore pylint's superfulous complaint.
125
- assert len (buf ) > 0 #pylint: disable=len-as-condition
125
+ assert len (buf ) > 0 # pylint: disable=len-as-condition
126
126
if count is None :
127
127
count = len (buf )
128
128
with self ._device as i2c :
129
- i2c .write_then_readinto (bytes ([address & 0xFF ]), buf ,
130
- in_end = count )
129
+ i2c .write_then_readinto (bytes ([address & 0xFF ]), buf , in_end = count )
131
130
132
131
def _read_u8 (self , address ):
133
132
# Read an 8-bit unsigned value from the specified 8-bit address.
@@ -154,9 +153,9 @@ def range(self):
154
153
def range (self , val ):
155
154
assert 0 <= val <= 2
156
155
reg1 = self ._read_u8 (_MMA8451_REG_CTRL_REG1 )
157
- self ._write_u8 (_MMA8451_REG_CTRL_REG1 , 0x00 ) # deactivate
156
+ self ._write_u8 (_MMA8451_REG_CTRL_REG1 , 0x00 ) # deactivate
158
157
self ._write_u8 (_MMA8451_REG_XYZ_DATA_CFG , val )
159
- self ._write_u8 (_MMA8451_REG_CTRL_REG1 , reg1 | 0x01 ) # activate
158
+ self ._write_u8 (_MMA8451_REG_CTRL_REG1 , reg1 | 0x01 ) # activate
160
159
161
160
@property
162
161
def data_rate (self ):
@@ -170,17 +169,16 @@ def data_rate(self):
170
169
- DATARATE_6_25HZ: 6.25Hz
171
170
- DATARATE_1_56HZ: 1.56Hz
172
171
"""
173
- return (self ._read_u8 (_MMA8451_REG_CTRL_REG1 ) >> 3 ) & \
174
- _MMA8451_DATARATE_MASK
172
+ return (self ._read_u8 (_MMA8451_REG_CTRL_REG1 ) >> 3 ) & _MMA8451_DATARATE_MASK
175
173
176
174
@data_rate .setter
177
175
def data_rate (self , val ):
178
176
assert 0 <= val <= 7
179
177
ctl1 = self ._read_u8 (_MMA8451_REG_CTRL_REG1 )
180
- self ._write_u8 (_MMA8451_REG_CTRL_REG1 , 0x00 ) # deactivate
181
- ctl1 &= ~ (_MMA8451_DATARATE_MASK << 3 ) # mask off bits
182
- ctl1 |= ( val << 3 )
183
- self ._write_u8 (_MMA8451_REG_CTRL_REG1 , ctl1 | 0x01 ) # activate
178
+ self ._write_u8 (_MMA8451_REG_CTRL_REG1 , 0x00 ) # deactivate
179
+ ctl1 &= ~ (_MMA8451_DATARATE_MASK << 3 ) # mask off bits
180
+ ctl1 |= val << 3
181
+ self ._write_u8 (_MMA8451_REG_CTRL_REG1 , ctl1 | 0x01 ) # activate
184
182
185
183
@property
186
184
def acceleration (self ):
@@ -192,26 +190,32 @@ def acceleration(self):
192
190
# Read 6 bytes for 16-bit X, Y, Z values.
193
191
self ._read_into (_MMA8451_REG_OUT_X_MSB , self ._BUFFER , count = 6 )
194
192
# Reconstruct signed 16-bit integers.
195
- x , y , z = struct .unpack (' >hhh' , self ._BUFFER )
193
+ x , y , z = struct .unpack (" >hhh" , self ._BUFFER )
196
194
x >>= 2
197
195
y >>= 2
198
196
z >>= 2
199
197
# Scale values based on current sensor range to get proper units.
200
198
_range = self .range
201
199
if _range == RANGE_8G :
202
- return (x / 1024.0 * _SENSORS_GRAVITY_EARTH ,
203
- y / 1024.0 * _SENSORS_GRAVITY_EARTH ,
204
- z / 1024.0 * _SENSORS_GRAVITY_EARTH )
200
+ return (
201
+ x / 1024.0 * _SENSORS_GRAVITY_EARTH ,
202
+ y / 1024.0 * _SENSORS_GRAVITY_EARTH ,
203
+ z / 1024.0 * _SENSORS_GRAVITY_EARTH ,
204
+ )
205
205
elif _range == RANGE_4G :
206
- return (x / 2048.0 * _SENSORS_GRAVITY_EARTH ,
207
- y / 2048.0 * _SENSORS_GRAVITY_EARTH ,
208
- z / 2048.0 * _SENSORS_GRAVITY_EARTH )
206
+ return (
207
+ x / 2048.0 * _SENSORS_GRAVITY_EARTH ,
208
+ y / 2048.0 * _SENSORS_GRAVITY_EARTH ,
209
+ z / 2048.0 * _SENSORS_GRAVITY_EARTH ,
210
+ )
209
211
elif _range == RANGE_2G :
210
- return (x / 4096.0 * _SENSORS_GRAVITY_EARTH ,
211
- y / 4096.0 * _SENSORS_GRAVITY_EARTH ,
212
- z / 4096.0 * _SENSORS_GRAVITY_EARTH )
212
+ return (
213
+ x / 4096.0 * _SENSORS_GRAVITY_EARTH ,
214
+ y / 4096.0 * _SENSORS_GRAVITY_EARTH ,
215
+ z / 4096.0 * _SENSORS_GRAVITY_EARTH ,
216
+ )
213
217
else :
214
- raise RuntimeError (' Unexpected range!' )
218
+ raise RuntimeError (" Unexpected range!" )
215
219
216
220
@property
217
221
def orientation (self ):
0 commit comments