htu21d_for_weather_shield

Dependents:   SPARKFUN_WEATHER_SHIELD

Fork of htu21d by Kevin Braun

Committer:
isaackod
Date:
Thu Oct 20 16:47:38 2016 +0000
Revision:
4:fe060047cc24
Parent:
3:5c0f8e91d319
Changes to use with weather shield;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
loopsva 0:2dab43acb3a4 1 /**
loopsva 1:d3ed713f8354 2 HTU21D / HPP828E031 driver for mbed.
loopsva 0:2dab43acb3a4 3 Author: Kevin Braun
loopsva 0:2dab43acb3a4 4 **/
loopsva 1:d3ed713f8354 5
loopsva 0:2dab43acb3a4 6 #include "htu21d.h"
loopsva 0:2dab43acb3a4 7
loopsva 2:8fbe84ed61e6 8 double theTempIs = 0.0;
loopsva 2:8fbe84ed61e6 9 double theHumIs = 0.0;
loopsva 2:8fbe84ed61e6 10
loopsva 3:5c0f8e91d319 11 #if not defined HTU21Di2cLOWLEVEL
loopsva 3:5c0f8e91d319 12 char htuBuffer[8];
loopsva 3:5c0f8e91d319 13 #endif
loopsva 3:5c0f8e91d319 14
loopsva 0:2dab43acb3a4 15 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:2dab43acb3a4 16 //Contstructor
loopsva 0:2dab43acb3a4 17
isaackod 4:fe060047cc24 18 htu21d::htu21d(I2C i2c) : _i2c(i2c)
isaackod 4:fe060047cc24 19 {
isaackod 4:fe060047cc24 20 i2c.frequency(400000);
loopsva 1:d3ed713f8354 21 }
loopsva 1:d3ed713f8354 22
isaackod 4:fe060047cc24 23
loopsva 0:2dab43acb3a4 24
loopsva 0:2dab43acb3a4 25 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 1:d3ed713f8354 26 //Destructor
loopsva 0:2dab43acb3a4 27
loopsva 0:2dab43acb3a4 28 htu21d::~htu21d() {
loopsva 0:2dab43acb3a4 29 }
loopsva 0:2dab43acb3a4 30
loopsva 0:2dab43acb3a4 31 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:2dab43acb3a4 32 //Perform a soft reset on the HTU21D. REturn of 1 = ok, 0 = timeout.
loopsva 0:2dab43acb3a4 33
loopsva 0:2dab43acb3a4 34 int htu21d::softReset() {
loopsva 0:2dab43acb3a4 35 int htu21 = 0;
loopsva 3:5c0f8e91d319 36 #if defined HTU21Di2cLOWLEVEL
loopsva 0:2dab43acb3a4 37 _i2c.start();
loopsva 0:2dab43acb3a4 38 htu21 = _i2c.write(HTU21Di2cWRITE); //i2c, 1 = ack
loopsva 0:2dab43acb3a4 39 if(htu21 == 1) {
loopsva 0:2dab43acb3a4 40 _i2c.write(HTU21DRESET); //soft reset, must wait 15mS
loopsva 0:2dab43acb3a4 41 _i2c.stop();
loopsva 1:d3ed713f8354 42 wait_ms(16); //must wait a least 15mS for reset to finish
loopsva 1:d3ed713f8354 43 htu21d::getSNReg(); //go load up the s/n registers
loopsva 0:2dab43acb3a4 44 }
loopsva 3:5c0f8e91d319 45 return(htu21);
loopsva 3:5c0f8e91d319 46 #else
loopsva 3:5c0f8e91d319 47 htuBuffer[0] = HTU21DRESET;
loopsva 3:5c0f8e91d319 48 htu21 = _i2c.write(HTU21Di2cWRITE, htuBuffer, 1, false);
loopsva 3:5c0f8e91d319 49 wait_ms(16);
loopsva 3:5c0f8e91d319 50 htu21d::getSNReg();
loopsva 3:5c0f8e91d319 51 return(!(htu21));
loopsva 0:2dab43acb3a4 52 #endif
loopsva 0:2dab43acb3a4 53 }
loopsva 0:2dab43acb3a4 54
loopsva 0:2dab43acb3a4 55 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:2dab43acb3a4 56 //Get the HTU21D user register. Returns 8 bit register.
loopsva 0:2dab43acb3a4 57
loopsva 0:2dab43acb3a4 58 uint8_t htu21d::getUserReg() {
loopsva 3:5c0f8e91d319 59 #if defined HTU21Di2cLOWLEVEL
loopsva 0:2dab43acb3a4 60 int htu21 = 0;
loopsva 0:2dab43acb3a4 61 uint8_t htu21data = 0;
loopsva 0:2dab43acb3a4 62 _i2c.start();
loopsva 0:2dab43acb3a4 63 htu21 = _i2c.write(HTU21Di2cWRITE); //i2c, 1 = ack
loopsva 0:2dab43acb3a4 64 if(htu21 == 1) {
loopsva 0:2dab43acb3a4 65 _i2c.write(HTU21DREADUSER);
loopsva 0:2dab43acb3a4 66 _i2c.start();
loopsva 0:2dab43acb3a4 67 htu21 = _i2c.write(HTU21Di2cREAD);
loopsva 0:2dab43acb3a4 68 htu21data = _i2c.read(0);
loopsva 0:2dab43acb3a4 69 _i2c.stop();
loopsva 0:2dab43acb3a4 70 }
loopsva 3:5c0f8e91d319 71 return(htu21data);
loopsva 3:5c0f8e91d319 72 #else
loopsva 3:5c0f8e91d319 73 htuBuffer[0] = HTU21DREADUSER;
loopsva 3:5c0f8e91d319 74 _i2c.write(HTU21Di2cWRITE, htuBuffer, 1, true);
loopsva 3:5c0f8e91d319 75 if(!(_i2c.read(HTU21Di2cREAD, htuBuffer, 1, false))) {
loopsva 3:5c0f8e91d319 76 return(htuBuffer[0]);
loopsva 3:5c0f8e91d319 77 } else {
loopsva 3:5c0f8e91d319 78 return(0);
loopsva 3:5c0f8e91d319 79 }
loopsva 0:2dab43acb3a4 80 #endif
loopsva 0:2dab43acb3a4 81 }
loopsva 0:2dab43acb3a4 82
loopsva 0:2dab43acb3a4 83 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:2dab43acb3a4 84 //Turn ON the heater the HTU21D user register.
loopsva 0:2dab43acb3a4 85
loopsva 0:2dab43acb3a4 86 int htu21d::heaterOn() {
loopsva 0:2dab43acb3a4 87 uint8_t htu21data = htu21d::getUserReg();
loopsva 0:2dab43acb3a4 88 htu21data |= HTU21DHEATER;
loopsva 3:5c0f8e91d319 89 #if defined HTU21Di2cLOWLEVEL
loopsva 0:2dab43acb3a4 90 int htu21 = 0;
loopsva 0:2dab43acb3a4 91 _i2c.start();
loopsva 0:2dab43acb3a4 92 htu21 = _i2c.write(HTU21Di2cWRITE); //i2c, 1 = ack
loopsva 0:2dab43acb3a4 93 if(htu21 == 1) {
loopsva 0:2dab43acb3a4 94 _i2c.write(HTU21DWRITEUSER);
loopsva 0:2dab43acb3a4 95 htu21 = _i2c.write(htu21data);
loopsva 0:2dab43acb3a4 96 _i2c.stop();
loopsva 0:2dab43acb3a4 97 }
loopsva 3:5c0f8e91d319 98 return(htu21);
loopsva 3:5c0f8e91d319 99 #else
loopsva 3:5c0f8e91d319 100 htuBuffer[0] = HTU21DWRITEUSER;
loopsva 3:5c0f8e91d319 101 htuBuffer[1] = htu21data;
loopsva 3:5c0f8e91d319 102 return(_i2c.write(HTU21Di2cWRITE, htuBuffer, 2, false));
loopsva 0:2dab43acb3a4 103 #endif
loopsva 0:2dab43acb3a4 104 }
loopsva 0:2dab43acb3a4 105
loopsva 0:2dab43acb3a4 106 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:2dab43acb3a4 107 //Turn OFF the heater the HTU21D user register.
loopsva 0:2dab43acb3a4 108
loopsva 0:2dab43acb3a4 109 int htu21d::heaterOff() {
loopsva 0:2dab43acb3a4 110 uint8_t htu21data = htu21d::getUserReg();
loopsva 0:2dab43acb3a4 111 htu21data &= ~HTU21DHEATER;
loopsva 3:5c0f8e91d319 112 #if defined HTU21Di2cLOWLEVEL
loopsva 0:2dab43acb3a4 113 int htu21 = 0;
loopsva 0:2dab43acb3a4 114 _i2c.start();
loopsva 0:2dab43acb3a4 115 htu21 = _i2c.write(HTU21Di2cWRITE); //i2c, 1 = ack
loopsva 0:2dab43acb3a4 116 if(htu21 == 1) {
loopsva 0:2dab43acb3a4 117 _i2c.write(HTU21DWRITEUSER);
loopsva 0:2dab43acb3a4 118 htu21 = _i2c.write(htu21data);
loopsva 0:2dab43acb3a4 119 _i2c.stop();
loopsva 0:2dab43acb3a4 120 }
loopsva 3:5c0f8e91d319 121 return(htu21);
loopsva 3:5c0f8e91d319 122 #else
loopsva 3:5c0f8e91d319 123 htuBuffer[0] = HTU21DWRITEUSER;
loopsva 3:5c0f8e91d319 124 htuBuffer[1] = htu21data;
loopsva 3:5c0f8e91d319 125 return(_i2c.write(HTU21Di2cWRITE, htuBuffer, 2, false));
loopsva 0:2dab43acb3a4 126 #endif
loopsva 0:2dab43acb3a4 127
loopsva 0:2dab43acb3a4 128 }
loopsva 0:2dab43acb3a4 129
loopsva 0:2dab43acb3a4 130 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:2dab43acb3a4 131 //Get the status of the heater the HTU21D user register. 0 = off, 4 = on.
loopsva 0:2dab43acb3a4 132
loopsva 0:2dab43acb3a4 133 uint8_t htu21d::getHeater() {
loopsva 0:2dab43acb3a4 134 uint8_t htu21data = htu21d::getUserReg();
loopsva 0:2dab43acb3a4 135 htu21data &= HTU21DHEATER;
loopsva 0:2dab43acb3a4 136 return(htu21data);
loopsva 0:2dab43acb3a4 137 }
loopsva 0:2dab43acb3a4 138
loopsva 0:2dab43acb3a4 139 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:2dab43acb3a4 140 //generic routine to get temp or humidity from HTU21D.
loopsva 0:2dab43acb3a4 141 //Returns 14 bits of data (anded 0xFFFC) or 0000 if i2c timeout occurs.
loopsva 0:2dab43acb3a4 142 //After a read temp or humidity command, HTU21D responds with NACKs until data is ready.
loopsva 0:2dab43acb3a4 143 //NOTE: Use non-hold commands
loopsva 0:2dab43acb3a4 144
loopsva 0:2dab43acb3a4 145 uint16_t htu21d::getData(uint8_t reg) {
loopsva 0:2dab43acb3a4 146 int htu21cnt = 0; //number of NACKs before ACK or timeout
loopsva 3:5c0f8e91d319 147 #if defined HTU21Di2cLOWLEVEL
loopsva 0:2dab43acb3a4 148 uint16_t htu21data = 0; //returned data
loopsva 3:5c0f8e91d319 149 int htu21 = 0; //ACK flag
loopsva 0:2dab43acb3a4 150 _i2c.start();
loopsva 0:2dab43acb3a4 151 htu21 = _i2c.write(HTU21Di2cWRITE);
loopsva 0:2dab43acb3a4 152 _i2c.write(reg); //read temp, no hold
loopsva 2:8fbe84ed61e6 153 _i2c.stop();
loopsva 0:2dab43acb3a4 154 if(htu21 == 0) return 0; //HTU21T not responding
loopsva 0:2dab43acb3a4 155 do {
loopsva 0:2dab43acb3a4 156 htu21cnt++;
loopsva 0:2dab43acb3a4 157 _i2c.start();
loopsva 0:2dab43acb3a4 158 htu21 = _i2c.write(HTU21Di2cREAD);
loopsva 0:2dab43acb3a4 159 if(htu21 == 1) {
loopsva 0:2dab43acb3a4 160 htu21data = _i2c.read(1) << 8;
loopsva 0:2dab43acb3a4 161 htu21data |= _i2c.read(0) & 0xFC;
loopsva 0:2dab43acb3a4 162 _i2c.stop();
loopsva 0:2dab43acb3a4 163 }
loopsva 2:8fbe84ed61e6 164 wait_us(1000);
loopsva 2:8fbe84ed61e6 165 } while((htu21cnt < 100) && (htu21 == 0)); //htu21cnt takes 55 to get temp, 16 for humidity (at 1mS loops)
loopsva 2:8fbe84ed61e6 166
loopsva 0:2dab43acb3a4 167 if(htu21 == 0) return 0; //HTU21D ACK response timed out
loopsva 0:2dab43acb3a4 168 return(htu21data); //return 14 bit value
loopsva 3:5c0f8e91d319 169 #else
loopsva 3:5c0f8e91d319 170 htuBuffer[0] = reg;
loopsva 3:5c0f8e91d319 171 _i2c.write(HTU21Di2cWRITE, htuBuffer, 1, false);
loopsva 3:5c0f8e91d319 172 do {
loopsva 3:5c0f8e91d319 173 htu21cnt++;
loopsva 3:5c0f8e91d319 174 if(!(_i2c.read(HTU21Di2cREAD, htuBuffer, 2, false))) {
loopsva 3:5c0f8e91d319 175 return((htuBuffer[0] << 8) | htuBuffer[1]);
loopsva 3:5c0f8e91d319 176 }
loopsva 3:5c0f8e91d319 177 wait_us(1000);
loopsva 3:5c0f8e91d319 178 } while(htu21cnt < 100);
loopsva 3:5c0f8e91d319 179 return 0;
loopsva 3:5c0f8e91d319 180 #endif
loopsva 0:2dab43acb3a4 181 }
loopsva 0:2dab43acb3a4 182
loopsva 0:2dab43acb3a4 183 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:2dab43acb3a4 184 //get temperature from HTU21D in degrees C. Returns with 255.0 if HTU21D had timed out.
loopsva 0:2dab43acb3a4 185
loopsva 0:2dab43acb3a4 186 float htu21d::getTemp() {
loopsva 0:2dab43acb3a4 187 uint16_t getData = htu21d::getData(HTU21DtempNOHOLD);
loopsva 0:2dab43acb3a4 188 if (getData == 0) return(255.0); //return with error
loopsva 0:2dab43acb3a4 189 double tempData = (double)getData / 65536.0;
loopsva 0:2dab43acb3a4 190 theTempIs = -46.85 + (175.72 * tempData);
loopsva 0:2dab43acb3a4 191 return(theTempIs);
loopsva 0:2dab43acb3a4 192 }
loopsva 0:2dab43acb3a4 193
loopsva 0:2dab43acb3a4 194 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:2dab43acb3a4 195 //get humidity from HTU21D in percentage. Returns with 255.0 if HTU21D had timed out.
loopsva 0:2dab43acb3a4 196
loopsva 0:2dab43acb3a4 197 float htu21d::getHum() {
loopsva 0:2dab43acb3a4 198 uint16_t getData = htu21d::getData(HTU21DhumNOHOLD);
loopsva 0:2dab43acb3a4 199 if (getData == 0) return(255.0); //return with error
loopsva 0:2dab43acb3a4 200 double tempData = (double)getData / 65536.0;
loopsva 0:2dab43acb3a4 201 theHumIs = -6.0 + (125.0 * tempData);
loopsva 0:2dab43acb3a4 202 return(theHumIs);
loopsva 0:2dab43acb3a4 203 }
loopsva 0:2dab43acb3a4 204
loopsva 0:2dab43acb3a4 205 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:2dab43acb3a4 206 //Calculate the Dew Point from getTemp and getHum. User must first execute both getTemp and getHum for an accurate result.
loopsva 0:2dab43acb3a4 207 //Calculations come from DHT library
loopsva 0:2dab43acb3a4 208 /* Copyright (C) Wim De Roeve
loopsva 0:2dab43acb3a4 209 * based on DHT22 sensor library by HO WING KIT
loopsva 0:2dab43acb3a4 210 * Arduino DHT11 library
loopsva 0:2dab43acb3a4 211 */
loopsva 0:2dab43acb3a4 212
loopsva 0:2dab43acb3a4 213 float htu21d::getDewPt() {
loopsva 0:2dab43acb3a4 214 // dewPoint function NOAA
loopsva 0:2dab43acb3a4 215 // reference: http://wahiduddin.net/calc/density_algorithms.htm
loopsva 0:2dab43acb3a4 216 double A0= 373.15/(273.15 + (double)theTempIs);
loopsva 0:2dab43acb3a4 217 double SUM = -7.90298 * (A0-1);
loopsva 0:2dab43acb3a4 218 SUM += 5.02808 * log10(A0);
loopsva 0:2dab43acb3a4 219 SUM += -1.3816e-7 * (pow(10, (11.344*(1-1/A0)))-1) ;
loopsva 0:2dab43acb3a4 220 SUM += 8.1328e-3 * (pow(10,(-3.49149*(A0-1)))-1) ;
loopsva 0:2dab43acb3a4 221 SUM += log10(1013.246);
loopsva 0:2dab43acb3a4 222 double VP = pow(10, SUM-3) * theHumIs;
loopsva 0:2dab43acb3a4 223 double T = log(VP/0.61078); // temp var
loopsva 0:2dab43acb3a4 224 return (241.88 * T) / (17.558-T);
loopsva 0:2dab43acb3a4 225 }
loopsva 0:2dab43acb3a4 226
loopsva 0:2dab43acb3a4 227 float htu21d::getDewPtFast() {
loopsva 0:2dab43acb3a4 228 // delta max = 0.6544 wrt dewPoint()
loopsva 0:2dab43acb3a4 229 // 5x faster than dewPoint()
loopsva 0:2dab43acb3a4 230 // reference: http://en.wikipedia.org/wiki/Dew_point
loopsva 0:2dab43acb3a4 231 double h21DtzA = 17.271;
loopsva 0:2dab43acb3a4 232 double h21DtzB = 237.7;
loopsva 0:2dab43acb3a4 233 double h21DtzC = (h21DtzA * theTempIs) / (h21DtzB + theTempIs) + log(theHumIs/100);
loopsva 0:2dab43acb3a4 234 double h21DtzD = (h21DtzB * h21DtzC) / (h21DtzA - h21DtzC);
loopsva 0:2dab43acb3a4 235 return (h21DtzD);
loopsva 0:2dab43acb3a4 236 }
loopsva 1:d3ed713f8354 237
loopsva 1:d3ed713f8354 238 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 1:d3ed713f8354 239 //Get the HTU21D serial number registers. Returns 64 bit register.
loopsva 1:d3ed713f8354 240 //should return 0x4854 00xx xxxx 32xx
loopsva 1:d3ed713f8354 241
loopsva 1:d3ed713f8354 242 void htu21d::getSNReg() {
loopsva 1:d3ed713f8354 243 //get 16 bit SNC register, 8 bit SNC-CRC, 16 bit SNA register, 8 bit SNA-CRC
loopsva 3:5c0f8e91d319 244 #if defined HTU21Di2cLOWLEVEL
loopsva 1:d3ed713f8354 245 int htu21 = 0;
loopsva 1:d3ed713f8354 246 _i2c.start();
loopsva 1:d3ed713f8354 247 htu21 = _i2c.write(HTU21Di2cWRITE); //i2c, 1 = ack
loopsva 1:d3ed713f8354 248 if(htu21 == 1) {
loopsva 1:d3ed713f8354 249 _i2c.write(HTU21SNAC1);
loopsva 1:d3ed713f8354 250 _i2c.write(HTU21SNAC2);
loopsva 1:d3ed713f8354 251 _i2c.start();
loopsva 1:d3ed713f8354 252 htu21 = _i2c.write(HTU21Di2cREAD);
loopsva 1:d3ed713f8354 253 HTU21sn.HTU21D_snc = _i2c.read(1) << 8;
loopsva 1:d3ed713f8354 254 HTU21sn.HTU21D_snc |= _i2c.read(1);
loopsva 1:d3ed713f8354 255 HTU21sn.HTU21D_crcc = _i2c.read(1);
loopsva 1:d3ed713f8354 256 HTU21sn.HTU21D_sna = _i2c.read(1) << 8;
loopsva 1:d3ed713f8354 257 HTU21sn.HTU21D_sna |= _i2c.read(1);
loopsva 1:d3ed713f8354 258 HTU21sn.HTU21D_crca = _i2c.read(0);
loopsva 1:d3ed713f8354 259 _i2c.stop();
loopsva 3:5c0f8e91d319 260 } else {
loopsva 3:5c0f8e91d319 261 HTU21sn.HTU21D_snc = HTU21sn.HTU21D_crcc = HTU21sn.HTU21D_sna = HTU21sn.HTU21D_crca = 0;
loopsva 1:d3ed713f8354 262 }
loopsva 3:5c0f8e91d319 263 #else
loopsva 3:5c0f8e91d319 264 htuBuffer[0] = HTU21SNAC1;
loopsva 3:5c0f8e91d319 265 htuBuffer[1] = HTU21SNAC2;
loopsva 3:5c0f8e91d319 266 _i2c.write(HTU21Di2cWRITE, htuBuffer, 2, true);
loopsva 3:5c0f8e91d319 267 if(!(_i2c.read(HTU21Di2cREAD, htuBuffer, 6, false))) {
loopsva 3:5c0f8e91d319 268 HTU21sn.HTU21D_snc = (htuBuffer[0] << 8) | htuBuffer[1];
loopsva 3:5c0f8e91d319 269 HTU21sn.HTU21D_crcc = htuBuffer[2];
loopsva 3:5c0f8e91d319 270 HTU21sn.HTU21D_sna = (htuBuffer[3] << 8) | htuBuffer[4];
loopsva 3:5c0f8e91d319 271 HTU21sn.HTU21D_crca = htuBuffer[5];
loopsva 3:5c0f8e91d319 272 } else {
loopsva 3:5c0f8e91d319 273 HTU21sn.HTU21D_snc = HTU21sn.HTU21D_crcc = HTU21sn.HTU21D_sna = HTU21sn.HTU21D_crca = 0;
loopsva 3:5c0f8e91d319 274 }
loopsva 3:5c0f8e91d319 275 #endif
loopsva 1:d3ed713f8354 276
loopsva 1:d3ed713f8354 277 //get 32 bit SNB register, 32 bit SNB-CRC - regs are intermixed
loopsva 3:5c0f8e91d319 278 #if defined HTU21Di2cLOWLEVEL
loopsva 1:d3ed713f8354 279 htu21 = 0;
loopsva 1:d3ed713f8354 280 _i2c.start();
loopsva 1:d3ed713f8354 281 htu21 = _i2c.write(HTU21Di2cWRITE); //i2c, 1 = ack
loopsva 1:d3ed713f8354 282 if(htu21 == 1) {
loopsva 1:d3ed713f8354 283 _i2c.write(HTU21SNB1);
loopsva 1:d3ed713f8354 284 _i2c.write(HTU21SNB2);
loopsva 1:d3ed713f8354 285 _i2c.start();
loopsva 1:d3ed713f8354 286 htu21 = _i2c.write(HTU21Di2cREAD);
loopsva 1:d3ed713f8354 287 HTU21sn.HTU21D_snb = _i2c.read(1) << 24;
loopsva 1:d3ed713f8354 288 HTU21sn.HTU21D_crcb = _i2c.read(1) << 24;
loopsva 1:d3ed713f8354 289 HTU21sn.HTU21D_snb |= _i2c.read(1) << 16;
loopsva 1:d3ed713f8354 290 HTU21sn.HTU21D_crcb |= _i2c.read(1) << 16;
loopsva 1:d3ed713f8354 291 HTU21sn.HTU21D_snb |= _i2c.read(1) << 8;
loopsva 1:d3ed713f8354 292 HTU21sn.HTU21D_crcb |= _i2c.read(1) << 8;
loopsva 1:d3ed713f8354 293 HTU21sn.HTU21D_snb |= _i2c.read(1);
loopsva 1:d3ed713f8354 294 HTU21sn.HTU21D_crcb |= _i2c.read(0);
loopsva 1:d3ed713f8354 295 _i2c.stop();
loopsva 3:5c0f8e91d319 296 } else {
loopsva 3:5c0f8e91d319 297 HTU21sn.HTU21D_snb = HTU21sn.HTU21D_crcb = 0;
loopsva 1:d3ed713f8354 298 }
loopsva 3:5c0f8e91d319 299 #else
loopsva 3:5c0f8e91d319 300 htuBuffer[0] = HTU21SNB1;
loopsva 3:5c0f8e91d319 301 htuBuffer[1] = HTU21SNB2;
loopsva 3:5c0f8e91d319 302 _i2c.write(HTU21Di2cWRITE, htuBuffer, 2, true);
loopsva 3:5c0f8e91d319 303 if(!(_i2c.read(HTU21Di2cREAD, htuBuffer, 8, false))) {
loopsva 3:5c0f8e91d319 304 HTU21sn.HTU21D_snb = (htuBuffer[0] << 24) | (htuBuffer[2] << 16) | (htuBuffer[4] << 8) | htuBuffer[6];
loopsva 3:5c0f8e91d319 305 HTU21sn.HTU21D_crcb = (htuBuffer[1] << 24) | (htuBuffer[3] << 16) | (htuBuffer[5] << 8) | htuBuffer[7];
loopsva 3:5c0f8e91d319 306 } else {
loopsva 3:5c0f8e91d319 307 HTU21sn.HTU21D_snb = HTU21sn.HTU21D_crcb = 0;
loopsva 3:5c0f8e91d319 308 }
loopsva 1:d3ed713f8354 309 #endif
loopsva 1:d3ed713f8354 310 }
loopsva 1:d3ed713f8354 311