@@ -287,63 +287,72 @@ def _get_regs(self, register, length):
287287 return self ._i2c .read_i2c_block_data (self .i2c_addr , register , length )
288288
289289 def _calc_temperature (self , temperature_adc ):
290- var1 = (temperature_adc / 8 ) - (self .calibration_data .par_t1 * 2 )
291- var2 = (var1 * self .calibration_data .par_t2 ) / 2048
292- var3 = ((var1 / 2 ) * (var1 / 2 )) / 4096
293- var3 = ((var3 ) * (self .calibration_data .par_t3 * 16 )) / 16384
290+ var1 = (temperature_adc >> 3 ) - (self .calibration_data .par_t1 << 1 )
291+ var2 = (var1 * self .calibration_data .par_t2 ) >> 11
292+ var3 = ((var1 >> 1 ) * (var1 >> 1 )) >> 12
293+ var3 = ((var3 ) * (self .calibration_data .par_t3 << 4 )) >> 14
294294
295295 # Save teperature data for pressure calculations
296296 self .calibration_data .t_fine = (var2 + var3 )
297- calc_temp = (((self .calibration_data .t_fine * 5 ) + 128 ) / 256 )
297+ calc_temp = (((self .calibration_data .t_fine * 5 ) + 128 ) >> 8 )
298298
299299 return calc_temp
300300
301301 def _calc_pressure (self , pressure_adc ):
302- var1 = (self .calibration_data .t_fine / 2 ) - 64000
303- var2 = ((var1 / 4 ) * (var1 / 4 )) / 2048
304- var2 = (var2 * self .calibration_data .par_p6 ) / 4
305- var2 = var2 + ((var1 * self .calibration_data .par_p5 ) * 2 )
306- var2 = (var2 / 4 ) + (self .calibration_data .par_p4 * 65536 )
307-
308- var1 = ((var1 / 4 ) * (var1 / 4 )) / 8192
309- var1 = ((var1 * (self .calibration_data .par_p3 * 32 )) / 8 ) + ((self .calibration_data .par_p2 * var1 ) / 2 )
310- var1 = var1 / 262144
311- var1 = ((32768 + var1 ) * self .calibration_data .par_p1 ) / 32768
312- calc_pres = 1048576 - pressure_adc
313- calc_pres = (calc_pres - (var2 / 4096 )) * 3125
314- calc_pres = (calc_pres / var1 ) * 2
315- var1 = (self .calibration_data .par_p9 * (((calc_pres / 8 ) * (calc_pres / 8 )) / 8192 )) / 4096
316- var2 = ((calc_pres / 4 ) * self .calibration_data .par_p8 ) / 8192
317- var3 = ((calc_pres / 256 )
318- * (calc_pres / 256 )
319- * (calc_pres / 256 )
320- * self .calibration_data .par_p10 ) / 131072
321- calc_pres = calc_pres + ((var1 + var2 + var3 + (self .calibration_data .par_p7 * 128 )) / 16 )
322-
323- return calc_pres
302+ var1 = ((self .calibration_data .t_fine ) >> 1 ) - 64000
303+ var2 = ((((var1 >> 2 ) * (var1 >> 2 )) >> 11 ) *
304+ self .calibration_data .par_p6 ) >> 2
305+ var2 = var2 + ((var1 * self .calibration_data .par_p5 ) << 1 )
306+ var2 = (var2 >> 2 ) + (self .calibration_data .par_p4 << 16 )
307+
308+ var1 = ((var1 >> 2 ) * (var1 >> 2 )) >> 13
309+ var1 = ((var1 * (self .calibration_data .par_p3 << 5 )) >> 3 ) + ((self .calibration_data .par_p2 * var1 ) >> 1 )
310+ var1 = var1 >> 18
311+
312+ var1 = ((32768 + var1 ) * self .calibration_data .par_p1 ) >> 15
313+ calc_pressure = 1048576 - pressure_adc
314+ calc_pressure = ((calc_pressure - (var2 >> 12 )) * (3125 ))
315+
316+ if calc_pressure >= (1 << 31 ):
317+ calc_pressure = ((calc_pressure / var1 ) << 1 )
318+ else :
319+ calc_pressure = ((calc_pressure << 1 ) / var1 )
320+
321+ var1 = (self .calibration_data .par_p9 * (((calc_pressure >> 3 ) *
322+ (calc_pressure >> 3 )) >> 13 )) >> 12
323+ var2 = ((calc_pressure >> 2 ) *
324+ self .calibration_data .par_p8 ) >> 13
325+ var3 = ((calc_pressure >> 8 ) * (calc_pressure >> 8 ) *
326+ (calc_pressure >> 8 ) *
327+ self .calibration_data .par_p10 ) >> 17
328+
329+ calc_pressure = (calc_pressure ) + ((var1 + var2 + var3 +
330+ (self .calibration_data .par_p7 << 7 )) >> 4 )
331+
332+ return calc_pressure
324333
325334 def _calc_humidity (self , humidity_adc ):
326- temp_scaled = ((self .calibration_data .t_fine * 5 ) + 128 ) / 256
335+ temp_scaled = ((self .calibration_data .t_fine * 5 ) + 128 ) >> 8
327336 var1 = (humidity_adc - ((self .calibration_data .par_h1 * 16 ))) \
328- - (((temp_scaled * self .calibration_data .par_h3 ) / (100 )) / 2 )
337+ - (((temp_scaled * self .calibration_data .par_h3 ) / (100 )) >> 1 )
329338 var2 = (self .calibration_data .par_h2
330339 * (((temp_scaled * self .calibration_data .par_h4 ) / (100 ))
331- + (((temp_scaled * ((temp_scaled * self .calibration_data .par_h5 ) / (100 ))) / 64 )
332- / (100 )) + (1 * 16384 ))) / 1024
340+ + (((temp_scaled * ((temp_scaled * self .calibration_data .par_h5 ) / (100 ))) >> 6 )
341+ / (100 )) + (1 * 16384 ))) >> 10
333342 var3 = var1 * var2
334- var4 = self .calibration_data .par_h6 * 128
335- var4 = ((var4 ) + ((temp_scaled * self .calibration_data .par_h7 ) / (100 ))) / 16
336- var5 = ((var3 / 16384 ) * (var3 / 16384 )) / 1024
337- var6 = (var4 * var5 ) / 2
338- calc_hum = (((var3 + var6 ) / 1024 ) * (1000 )) / 4096
343+ var4 = self .calibration_data .par_h6 << 7
344+ var4 = ((var4 ) + ((temp_scaled * self .calibration_data .par_h7 ) / (100 ))) >> 4
345+ var5 = ((var3 >> 14 ) * (var3 >> 14 )) >> 10
346+ var6 = (var4 * var5 ) >> 1
347+ calc_hum = (((var3 + var6 ) >> 10 ) * (1000 )) >> 12
339348
340349 return min (max (calc_hum ,0 ),100000 )
341350
342351 def _calc_gas_resistance (self , gas_res_adc , gas_range ):
343- var1 = ((1340 + (5 * self .calibration_data .range_sw_err )) * (lookupTable1 [gas_range ])) / 65536
344- var2 = (((gas_res_adc * 32768 ) - (16777216 )) + var1 )
345- var3 = ((lookupTable2 [gas_range ] * var1 ) / 512 )
346- calc_gas_res = ((var3 + (var2 / 2 )) / var2 )
352+ var1 = ((1340 + (5 * self .calibration_data .range_sw_err )) * (lookupTable1 [gas_range ])) >> 16
353+ var2 = (((gas_res_adc << 15 ) - (16777216 )) + var1 )
354+ var3 = ((lookupTable2 [gas_range ] * var1 ) >> 9 )
355+ calc_gas_res = ((var3 + (var2 >> 1 )) / var2 )
347356
348357 return calc_gas_res
349358
0 commit comments