Skip to content

Commit 5433c99

Browse files
authored
Merge pull request #22 from caternuson/iss19
Fix temperature reads and RP2040 reset quirk
2 parents 4af9ecb + 830cb3b commit 5433c99

File tree

1 file changed

+14
-5
lines changed

1 file changed

+14
-5
lines changed

adafruit_mpl3115a2.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,11 @@ def __init__(self, i2c, *, address=_MPL3115A2_ADDRESS):
141141
pass
142142
time.sleep(0.01)
143143
# Poll for the reset to finish.
144-
self._poll_reg1(_MPL3115A2_CTRL_REG1_RST)
144+
# try/except is a hack for RP2040
145+
try:
146+
self._poll_reg1(_MPL3115A2_CTRL_REG1_RST)
147+
except OSError:
148+
self._poll_reg1(_MPL3115A2_CTRL_REG1_RST)
145149
# Configure the chip registers with default values.
146150
self._ctrl_reg1 = _MPL3115A2_CTRL_REG1_OS128 | _MPL3115A2_CTRL_REG1_ALT
147151
self._write_u8(_MPL3115A2_CTRL_REG1, self._ctrl_reg1)
@@ -198,7 +202,7 @@ def pressure(self):
198202
self._write_u8(_MPL3115A2_CTRL_REG1, self._ctrl_reg1)
199203
self._ctrl_reg1 |= 0b00000010 # Set OST to 1 to start measurement.
200204
self._write_u8(_MPL3115A2_CTRL_REG1, self._ctrl_reg1)
201-
# Poll status for PDR to be set.
205+
# Poll status for PDR to be set = press conversion complete
202206
while (
203207
self._read_u8(_MPL3115A2_REGISTER_STATUS) & _MPL3115A2_REGISTER_STATUS_PDR
204208
== 0
@@ -211,8 +215,8 @@ def pressure(self):
211215
(self._BUFFER[0] << 16) | (self._BUFFER[1] << 8) | self._BUFFER[2]
212216
) & 0xFFFFFF
213217
pressure >>= 4
214-
# Scale down to pascals.
215-
return pressure / 4.0
218+
# Scale down to hectopascals.
219+
return pressure / 400.0
216220

217221
@property
218222
def altitude(self):
@@ -248,7 +252,12 @@ def altitude(self):
248252
@property
249253
def temperature(self):
250254
"""Read the temperature as measured by the sensor in degrees Celsius."""
251-
# Poll status for TDR to be set.
255+
# First poll for a measurement to be finished.
256+
self._poll_reg1(_MPL3115A2_CTRL_REG1_OST)
257+
# Initatiate a one-shot measurement
258+
self._ctrl_reg1 |= 0b00000010 # Set OST to 1 to start measurement.
259+
self._write_u8(_MPL3115A2_CTRL_REG1, self._ctrl_reg1)
260+
# Poll status for TDR to be set = temp conv complete
252261
while (
253262
self._read_u8(_MPL3115A2_REGISTER_STATUS) & _MPL3115A2_REGISTER_STATUS_TDR
254263
== 0

0 commit comments

Comments
 (0)