116
116
_LSM303ACCEL_MG_LSB = 16704.0
117
117
_GRAVITY_STANDARD = 9.80665 # Earth's gravity in m/s^2
118
118
_GAUSS_TO_MICROTESLA = 100.0 # Gauss to micro-Tesla multiplier
119
+ # pylint: enable=bad-whitespace
120
+
119
121
120
122
class LSM303 (object ):
121
123
"""Driver for the LSM303 accelerometer/magnetometer."""
@@ -128,122 +130,111 @@ class LSM303(object):
128
130
def __init__ (self , i2c ):
129
131
self ._accel_device = I2CDevice (i2c , _ADDRESS_ACCEL )
130
132
self ._mag_device = I2CDevice (i2c , _ADDRESS_MAG )
131
- self ._write_u8 (self ._accel_device , _REG_ACCEL_CTRL_REG1_A , 0x27 ) # Enable the accelerometer
132
- self ._write_u8 (self ._mag_device , _REG_MAG_MR_REG_M , 0x00 ) # Enable the magnetometer
133
+ self ._write_u8 (self ._accel_device , _REG_ACCEL_CTRL_REG1_A , 0x27 ) # Enable the accelerometer
134
+ self ._write_u8 (self ._mag_device , _REG_MAG_MR_REG_M , 0x00 ) # Enable the magnetometer
133
135
self ._lsm303mag_gauss_lsb_xy = 1100.0
134
136
self ._lsm303mag_gauss_lsb_z = 980.0
135
137
self ._mag_gain = MAGGAIN_1_3
136
138
self ._mag_rate = MAGRATE_0_7
137
139
138
140
@property
139
- def raw_accelerometer (self ):
141
+ def raw_acceleration (self ):
140
142
"""The raw accelerometer sensor values.
141
143
A 3-tuple of X, Y, Z axis values that are 16-bit signed integers.
142
144
"""
143
145
self ._read_bytes (self ._accel_device , _REG_ACCEL_OUT_X_L_A | 0x80 , 6 , self ._BUFFER )
144
146
return struct .unpack_from ('<hhh' , self ._BUFFER [0 :6 ])
145
147
146
-
147
148
@property
148
- def accelerometer (self ):
149
+ def acceleration (self ):
149
150
"""The processed accelerometer sensor values.
150
151
A 3-tuple of X, Y, Z axis values in meters per second squared that are signed floats.
151
152
"""
152
- raw_accel_data = self .raw_accelerometer
153
- return [n / _LSM303ACCEL_MG_LSB * _GRAVITY_STANDARD for n in raw_accel_data ]
154
-
153
+ raw_accel_data = self .raw_acceleration
154
+ return tuple ([n / _LSM303ACCEL_MG_LSB * _GRAVITY_STANDARD for n in raw_accel_data ])
155
155
156
156
@property
157
- def raw_magnetometer (self ):
157
+ def raw_magnetic (self ):
158
158
"""The raw magnetometer sensor values.
159
159
A 3-tuple of X, Y, Z axis values that are 16-bit signed integers.
160
160
"""
161
161
self ._read_bytes (self ._mag_device , _REG_MAG_OUT_X_H_M , 6 , self ._BUFFER )
162
162
raw_values = struct .unpack_from ('>hhh' , self ._BUFFER [0 :6 ])
163
- return [n >> 4 for n in raw_values ]
164
-
163
+ return tuple ([n >> 4 for n in raw_values ])
165
164
166
165
@property
167
- def magnetometer (self ):
166
+ def magnetic (self ):
168
167
"""The processed magnetometer sensor values.
169
168
A 3-tuple of X, Y, Z axis values in microteslas that are signed floats.
170
169
"""
171
- mag_x , mag_y , mag_z = self .raw_magnetometer
170
+ mag_x , mag_y , mag_z = self .raw_magnetic
172
171
return (mag_x / self ._lsm303mag_gauss_lsb_xy * _GAUSS_TO_MICROTESLA ,
173
172
mag_y / self ._lsm303mag_gauss_lsb_xy * _GAUSS_TO_MICROTESLA ,
174
173
mag_z / self ._lsm303mag_gauss_lsb_z * _GAUSS_TO_MICROTESLA )
175
174
176
-
177
175
@property
178
176
def mag_gain (self ):
179
177
"""The magnetometer's gain."""
180
178
return self ._mag_gain
181
179
182
-
183
180
@mag_gain .setter
184
181
def mag_gain (self , value ):
185
- # pylint: disable=line-too-long
186
- assert value in (MAGGAIN_1_3 , MAGGAIN_1_9 , MAGGAIN_2_5 , MAGGAIN_4_0 , MAGGAIN_4_7 , MAGGAIN_5_6 , MAGGAIN_8_1 )
187
- # pylint: enable=line-too-long
182
+ assert value in (MAGGAIN_1_3 , MAGGAIN_1_9 , MAGGAIN_2_5 , MAGGAIN_4_0 , MAGGAIN_4_7 ,
183
+ MAGGAIN_5_6 , MAGGAIN_8_1 )
188
184
189
185
self ._mag_gain = value
190
186
self ._write_u8 (self ._mag_device , _REG_MAG_CRB_REG_M , self ._mag_gain )
191
187
if self ._mag_gain == MAGGAIN_1_3 :
192
188
self ._lsm303mag_gauss_lsb_xy = 1100.0
193
- self ._lsm303mag_gauss_lsb_z = 980.0
189
+ self ._lsm303mag_gauss_lsb_z = 980.0
194
190
elif self ._mag_gain == MAGGAIN_1_9 :
195
191
self ._lsm303mag_gauss_lsb_xy = 855.0
196
- self ._lsm303mag_gauss_lsb_z = 760.0
192
+ self ._lsm303mag_gauss_lsb_z = 760.0
197
193
elif self ._mag_gain == MAGGAIN_2_5 :
198
194
self ._lsm303mag_gauss_lsb_xy = 670.0
199
- self ._lsm303mag_gauss_lsb_z = 600.0
195
+ self ._lsm303mag_gauss_lsb_z = 600.0
200
196
elif self ._mag_gain == MAGGAIN_4_0 :
201
197
self ._lsm303mag_gauss_lsb_xy = 450.0
202
- self ._lsm303mag_gauss_lsb_z = 400.0
198
+ self ._lsm303mag_gauss_lsb_z = 400.0
203
199
elif self ._mag_gain == MAGGAIN_4_7 :
204
200
self ._lsm303mag_gauss_lsb_xy = 400.0
205
- self ._lsm303mag_gauss_lsb_z = 355.0
201
+ self ._lsm303mag_gauss_lsb_z = 355.0
206
202
elif self ._mag_gain == MAGGAIN_5_6 :
207
203
self ._lsm303mag_gauss_lsb_xy = 330.0
208
- self ._lsm303mag_gauss_lsb_z = 295.0
204
+ self ._lsm303mag_gauss_lsb_z = 295.0
209
205
elif self ._mag_gain == MAGGAIN_8_1 :
210
206
self ._lsm303mag_gauss_lsb_xy = 230.0
211
- self ._lsm303mag_gauss_lsb_z = 205.0
212
-
207
+ self ._lsm303mag_gauss_lsb_z = 205.0
213
208
214
209
@property
215
210
def mag_rate (self ):
216
211
"""The magnetometer update rate."""
217
212
return self ._mag_rate
218
213
219
-
220
214
@mag_rate .setter
221
215
def mag_rate (self , value ):
222
- # pylint: disable=line-too-long
223
- assert value in (MAGRATE_0_7 , MAGRATE_1_5 , MAGRATE_3_0 , MAGRATE_7_5 , MAGRATE_15 , MAGRATE_30 , MAGRATE_75 , MAGRATE_220 )
224
- # pylint: enable=line-too-long
216
+ assert value in (MAGRATE_0_7 , MAGRATE_1_5 , MAGRATE_3_0 , MAGRATE_7_5 , MAGRATE_15 , MAGRATE_30 ,
217
+ MAGRATE_75 , MAGRATE_220 )
225
218
226
219
self ._mag_rate = value
227
220
reg_m = ((value & 0x07 ) << 2 ) & 0xFF
228
221
self ._write_u8 (self ._mag_device , _REG_MAG_CRA_REG_M , reg_m )
229
222
230
-
231
223
def _read_u8 (self , device , address ):
232
224
with device as i2c :
233
225
self ._BUFFER [0 ] = address & 0xFF
234
226
i2c .write (self ._BUFFER , end = 1 , stop = False )
235
227
i2c .readinto (self ._BUFFER , end = 1 )
236
228
return self ._BUFFER [0 ]
237
229
238
-
239
230
def _write_u8 (self , device , address , val ):
240
231
with device as i2c :
241
232
self ._BUFFER [0 ] = address & 0xFF
242
233
self ._BUFFER [1 ] = val & 0xFF
243
234
i2c .write (self ._BUFFER , end = 2 )
244
235
245
- # pylint: disable=no-self-use
246
- def _read_bytes (self , device , address , count , buf ):
236
+ @ staticmethod
237
+ def _read_bytes (device , address , count , buf ):
247
238
with device as i2c :
248
239
buf [0 ] = address & 0xFF
249
240
i2c .write (buf , end = 1 , stop = False )
0 commit comments