|
1 | 1 | from machine import I2C |
| 2 | +from time import sleep_ms |
2 | 3 |
|
3 | 4 | from hts221.const import * |
4 | 5 |
|
@@ -84,20 +85,58 @@ def getAv(self): |
84 | 85 | def setAv(self, av=0): |
85 | 86 | self._write_reg(HTS221_AV_CONF, av) |
86 | 87 |
|
| 88 | + # one-shot / auto-trigger helpers |
| 89 | + def _is_power_down(self): |
| 90 | + return (self._read_reg(HTS221_CTRL_REG1) & HTS221_CTRL1_PD) == 0 |
| 91 | + |
| 92 | + def _is_one_shot_mode(self): |
| 93 | + ctrl1 = self._read_reg(HTS221_CTRL_REG1) |
| 94 | + is_active = bool(ctrl1 & HTS221_CTRL1_PD) |
| 95 | + odr = ctrl1 & HTS221_CTRL1_ODR_MASK |
| 96 | + return is_active and odr == 0 |
| 97 | + |
| 98 | + def trigger_one_shot(self): |
| 99 | + ctrl1 = self._read_reg(HTS221_CTRL_REG1) |
| 100 | + ctrl1 |= HTS221_CTRL1_PD | HTS221_CTRL1_BDU |
| 101 | + ctrl1 &= ~HTS221_CTRL1_ODR_MASK |
| 102 | + self._write_reg(HTS221_CTRL_REG1, ctrl1) |
| 103 | + ctrl2 = self._read_reg(HTS221_CTRL_REG2) |
| 104 | + self._write_reg(HTS221_CTRL_REG2, ctrl2 | HTS221_CTRL2_ONE_SHOT) |
| 105 | + sleep_ms(15) |
| 106 | + |
| 107 | + def _ensure_data(self): |
| 108 | + if self._is_power_down() or self._is_one_shot_mode(): |
| 109 | + self.trigger_one_shot() |
| 110 | + |
87 | 111 | # calculate Temperature |
88 | 112 | def temperature(self): |
| 113 | + self._ensure_data() |
89 | 114 | t = self._read_reg16(HTS221_TEMP_OUT_L) |
90 | 115 | return self.T0_degC + (self.T1_degC - self.T0_degC) * (t - self.T0_OUT) / ( |
91 | 116 | self.T1_OUT - self.T0_OUT |
92 | 117 | ) |
93 | 118 |
|
94 | 119 | # calculate Humidity |
95 | 120 | def humidity(self): |
| 121 | + self._ensure_data() |
96 | 122 | t = self._read_reg16(HTS221_HUMIDITY_OUT_L) |
97 | 123 | return self.H0_rH + (self.H1_rH - self.H0_rH) * (t - self.H0_OUT) / ( |
98 | 124 | self.H1_OUT - self.H0_OUT |
99 | 125 | ) |
100 | 126 |
|
101 | 127 | # get Humidity and Temperature |
| 128 | + def read(self): |
| 129 | + self._ensure_data() |
| 130 | + h = self._read_reg16(HTS221_HUMIDITY_OUT_L) |
| 131 | + t = self._read_reg16(HTS221_TEMP_OUT_L) |
| 132 | + humidity = self.H0_rH + (self.H1_rH - self.H0_rH) * (h - self.H0_OUT) / ( |
| 133 | + self.H1_OUT - self.H0_OUT |
| 134 | + ) |
| 135 | + temperature = self.T0_degC + (self.T1_degC - self.T0_degC) * (t - self.T0_OUT) / ( |
| 136 | + self.T1_OUT - self.T0_OUT |
| 137 | + ) |
| 138 | + return humidity, temperature |
| 139 | + |
102 | 140 | def get(self): |
103 | | - return [self.humidity(), self.temperature()] |
| 141 | + h, t = self.read() |
| 142 | + return [h, t] |
0 commit comments