1212
1313
1414// SUPPORTED COMMANDS - single shot mode only
15- # define SHT31_READ_STATUS 0xF32D
16- # define SHT31_CLEAR_STATUS 0x3041
15+ static constexpr uint16_t SHT31_READ_STATUS = 0xF32D ;
16+ static constexpr uint16_t SHT31_CLEAR_STATUS = 0x3041 ;
1717
18- # define SHT31_SOFT_RESET 0x30A2
19- # define SHT31_HARD_RESET 0x0006
18+ static constexpr uint16_t SHT31_SOFT_RESET = 0x30A2 ;
19+ static constexpr uint16_t SHT31_HARD_RESET = 0x0006 ;
2020
21- # define SHT31_MEASUREMENT_FAST 0x2416 // page 10 datasheet
22- # define SHT31_MEASUREMENT_SLOW 0x2400 // no clock stretching
21+ static constexpr uint16_t SHT31_MEASUREMENT_FAST = 0x2416 ; // page 10 datasheet
22+ static constexpr uint16_t SHT31_MEASUREMENT_SLOW = 0x2400 ; // no clock stretching
2323
24- #define SHT31_HEAT_ON 0x306D
25- #define SHT31_HEAT_OFF 0x3066
26- #define SHT31_HEATER_TIMEOUT 180000UL // milliseconds
24+ static constexpr uint16_t SHT31_HEAT_ON = 0x306D ;
25+ static constexpr uint16_t SHT31_HEAT_OFF = 0x3066 ;
26+ static constexpr uint32_t SHT31_HEATER_TIMEOUT = 180000UL ; // milliseconds
27+
28+ static constexpr uint16_t SHT31_GET_SERIAL_NUMBER = 0x3682 ; // no clock stretching
2729
28- static constexpr uint16_t SHT31_GET_SERIAL_NUMBER = 0x3682 ; // no clock stretching
2930
3031SHT31::SHT31 (uint8_t address, TwoWire *wire)
3132{
32- _wire = wire;
3333 _address = address;
34+ _wire = wire;
3435 _lastRead = 0 ;
3536 _rawTemperature = 0 ;
3637 _rawHumidity = 0 ;
@@ -132,7 +133,6 @@ uint16_t SHT31::readStatus()
132133 _error = SHT31_ERR_CRC_STATUS;
133134 return 0xFFFF ;
134135 }
135-
136136 return (uint16_t ) (status[0 ] << 8 ) + status[1 ];
137137}
138138
@@ -151,6 +151,7 @@ bool SHT31::clearStatus()
151151 return true ;
152152}
153153
154+
154155bool SHT31::reset (bool hard)
155156{
156157 bool b = writeCmd (hard ? SHT31_HARD_RESET : SHT31_SOFT_RESET);
@@ -225,7 +226,7 @@ bool SHT31::isHeaterOn()
225226
226227// ///////////////////////////////////////////////////////////////
227228//
228- // ASYNC
229+ // ASYNCHRONUOUS INTERFACE
229230//
230231bool SHT31::requestData ()
231232{
@@ -270,18 +271,22 @@ bool SHT31::readData(bool fast)
270271 _rawHumidity = (buffer[3 ] << 8 ) + buffer[4 ];
271272
272273 _lastRead = millis ();
273-
274274 return true ;
275275}
276276
277277
278+ // ///////////////////////////////////////////////////////////////
279+ //
280+ // MISC
281+ //
278282int SHT31::getError ()
279283{
280284 int rv = _error;
281285 _error = SHT31_OK;
282286 return rv;
283287}
284288
289+
285290/* *
286291 * See https://sensirion.com/media/documents/E5762713/63D103C2/Sensirion_electronic_identification_code_SHT3x.pdf
287292 */
@@ -305,10 +310,17 @@ bool SHT31::getSerialNumber(uint32_t &serial, bool fast) {
305310 return false ;
306311 }
307312 }
308- serial = (buffer[0 ] << 24 ) | (buffer[1 ] << 16 ) | (buffer[3 ] << 8 ) | buffer[4 ];
313+ serial = buffer[0 ];
314+ serial <<= 8 ;
315+ serial += buffer[1 ];
316+ serial <<= 8 ;
317+ serial += buffer[3 ];
318+ serial <<= 8 ;
319+ serial += buffer[4 ];
309320 return true ;
310321}
311322
323+
312324// ///////////////////////////////////////////////////////////////
313325//
314326// PROTECTED
@@ -342,6 +354,7 @@ bool SHT31::writeCmd(uint16_t cmd)
342354 _error = SHT31_ERR_WRITECMD;
343355 return false ;
344356 }
357+ _error = SHT31_OK;
345358 return true ;
346359}
347360
@@ -355,6 +368,7 @@ bool SHT31::readBytes(uint8_t n, uint8_t *val)
355368 {
356369 val[i] = _wire->read ();
357370 }
371+ _error = SHT31_OK;
358372 return true ;
359373 }
360374 _error = SHT31_ERR_READBYTES;
0 commit comments