|
74 | 74 | IIR_FILTER_X8 = const(0x03)
|
75 | 75 | IIR_FILTER_X16 = const(0x04)
|
76 | 76 |
|
77 |
| -_BME280_IIR_FILTERS = frozenset((IIR_FILTER_DISABLE, IIR_FILTER_X2, |
78 |
| - IIR_FILTER_X4, IIR_FILTER_X8, IIR_FILTER_X16)) |
| 77 | +_BME280_IIR_FILTERS = (IIR_FILTER_DISABLE, IIR_FILTER_X2, |
| 78 | + IIR_FILTER_X4, IIR_FILTER_X8, IIR_FILTER_X16) |
79 | 79 |
|
80 | 80 | """overscan values for temperature, pressure, and humidity"""
|
81 | 81 | OVERSCAN_DISABLE = const(0x00)
|
|
93 | 93 | MODE_FORCE = const(0x01)
|
94 | 94 | MODE_NORMAL = const(0x03)
|
95 | 95 |
|
96 |
| -_BME280_MODES = frozenset((MODE_SLEEP, MODE_FORCE, MODE_NORMAL)) |
| 96 | +_BME280_MODES = (MODE_SLEEP, MODE_FORCE, MODE_NORMAL) |
97 | 97 | """
|
98 | 98 | standby timeconstant values
|
99 | 99 | TC_X[_Y] where X=milliseconds and Y=tenths of a millisecond
|
|
107 | 107 | STANDBY_TC_500 = const(0x04) #500ms
|
108 | 108 | STANDBY_TC_1000 = const(0x05) #1000ms
|
109 | 109 |
|
110 |
| -_BME280_STANDBY_TCS = frozenset((STANDBY_TC_0_5, STANDBY_TC_10, STANDBY_TC_20, |
111 |
| - STANDBY_TC_62_5, STANDBY_TC_125, STANDBY_TC_250, |
112 |
| - STANDBY_TC_500, STANDBY_TC_1000)) |
| 110 | +_BME280_STANDBY_TCS = (STANDBY_TC_0_5, STANDBY_TC_10, STANDBY_TC_20, |
| 111 | + STANDBY_TC_62_5, STANDBY_TC_125, STANDBY_TC_250, |
| 112 | + STANDBY_TC_500, STANDBY_TC_1000) |
113 | 113 |
|
114 | 114 | class Adafruit_BME280:
|
115 | 115 | """Driver from BME280 Temperature, Humidity and Barometic Pressure sensor"""
|
@@ -344,23 +344,21 @@ def pressure(self):
|
344 | 344 | var3 = self._pressure_calib[2] * var1 * var1 / 524288.0
|
345 | 345 | var1 = (var3 + self._pressure_calib[1] * var1) / 524288.0
|
346 | 346 | var1 = (1.0 + var1 / 32768.0) * self._pressure_calib[0]
|
347 |
| - if var1 == 0: |
348 |
| - return 0 |
349 |
| - if var1: |
350 |
| - pressure = 1048576.0 - adc |
351 |
| - pressure = ((pressure - var2 / 4096.0) * 6250.0) / var1 |
352 |
| - var1 = self._pressure_calib[8] * pressure * pressure / 2147483648.0 |
353 |
| - var2 = pressure * self._pressure_calib[7] / 32768.0 |
354 |
| - pressure = pressure + (var1 + var2 + self._pressure_calib[6]) / 16.0 |
355 |
| - |
356 |
| - pressure /= 100 |
357 |
| - if pressure < _BME280_PRESSURE_MIN_HPA: |
358 |
| - return _BME280_PRESSURE_MIN_HPA |
359 |
| - if pressure > _BME280_PRESSURE_MAX_HPA: |
360 |
| - return _BME280_PRESSURE_MAX_HPA |
361 |
| - return pressure |
362 |
| - else: |
| 347 | + if not var1: # avoid exception caused by division by zero |
| 348 | + raise ArithmeticError("Invalid result possibly related to error while \ |
| 349 | +reading the calibration registers") |
| 350 | + pressure = 1048576.0 - adc |
| 351 | + pressure = ((pressure - var2 / 4096.0) * 6250.0) / var1 |
| 352 | + var1 = self._pressure_calib[8] * pressure * pressure / 2147483648.0 |
| 353 | + var2 = pressure * self._pressure_calib[7] / 32768.0 |
| 354 | + pressure = pressure + (var1 + var2 + self._pressure_calib[6]) / 16.0 |
| 355 | + |
| 356 | + pressure /= 100 |
| 357 | + if pressure < _BME280_PRESSURE_MIN_HPA: |
363 | 358 | return _BME280_PRESSURE_MIN_HPA
|
| 359 | + if pressure > _BME280_PRESSURE_MAX_HPA: |
| 360 | + return _BME280_PRESSURE_MAX_HPA |
| 361 | + return pressure |
364 | 362 |
|
365 | 363 | @property
|
366 | 364 | def humidity(self):
|
@@ -416,7 +414,7 @@ def _read_coefficients(self):
|
416 | 414 | self._humidity_calib = [0]*6
|
417 | 415 | self._humidity_calib[0] = self._read_byte(_BME280_REGISTER_DIG_H1)
|
418 | 416 | coeff = self._read_register(_BME280_REGISTER_DIG_H2, 7)
|
419 |
| - coeff = list(struct.unpack('<hBBBBb', bytes(coeff))) |
| 417 | + coeff = list(struct.unpack('<hBbBbb', bytes(coeff))) |
420 | 418 | self._humidity_calib[1] = float(coeff[0])
|
421 | 419 | self._humidity_calib[2] = float(coeff[1])
|
422 | 420 | self._humidity_calib[3] = float((coeff[2] << 4) | (coeff[3] & 0xF))
|
|
0 commit comments