SHT3X_ATY.c 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570
  1. /**
  2. * @file SHT3X_ATY.c
  3. *
  4. * @param Project DEVICE_GENERAL_ATY_LIB
  5. *
  6. * @author ATY
  7. *
  8. * @copyright
  9. * - Copyright 2017 - 2026 MZ-ATY
  10. * - This code follows:
  11. * - MZ-ATY Various Contents Joint Statement -
  12. * <a href="https://mengze.top/MZ-ATY_VCJS">
  13. * https://mengze.top/MZ-ATY_VCJS</a>
  14. * - CC 4.0 BY-NC-SA -
  15. * <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/">
  16. * https://creativecommons.org/licenses/by-nc-sa/4.0/</a>
  17. * - Your use will be deemed to have accepted the terms of this statement.
  18. *
  19. * @brief functions of SHT3X tem&hum transistor for all devices
  20. *
  21. * @version
  22. * - 1_01_200318 > ATY
  23. * -# Preliminary version, first Release
  24. * - 1_02_231229 > ATY
  25. * -# add multy addr and channel
  26. ********************************************************************************
  27. */
  28. #ifndef __SHT3X_ATY_C
  29. #define __SHT3X_ATY_C
  30. #include "SHT3X_ATY.h"
  31. /* ------------------------ Dev-style helpers & APIs ------------------------ */
  32. static uint8_t _sht3x_calc_crc(uint8_t* data, uint8_t len)
  33. {
  34. uint8_t bit_t;
  35. uint8_t crc = 0xFF;
  36. uint8_t i;
  37. for(i = 0; i < len; i++)
  38. {
  39. crc ^= data[i];
  40. for(bit_t = 8; bit_t > 0; --bit_t)
  41. {
  42. if(crc & 0x80)
  43. crc = (crc << 1) ^ POLYNOMIAL;
  44. else
  45. crc = (crc << 1);
  46. }
  47. }
  48. return crc;
  49. }
  50. static uint8_t _sht3x_check_crc(uint8_t* data, uint8_t len, uint8_t checksum)
  51. {
  52. return (_sht3x_calc_crc(data, len) != checksum);
  53. }
  54. static int _sht3x_write_cmd(SHT3X_ATY_Dev* dev, uint16_t cmd)
  55. {
  56. uint8_t buf[2];
  57. buf[0] = (uint8_t)(cmd >> 8);
  58. buf[1] = (uint8_t)(cmd & 0xFF);
  59. return dev && dev->i2c_write ? dev->i2c_write(dev->addr, buf, 2, dev->channel) : -1;
  60. }
  61. static void _sht3x_value_process(SHT3X_ATY_Dev* dev, uint16_t* temperature, uint16_t* humidity)
  62. {
  63. if(!dev || !temperature || !humidity) return;
  64. dev->lastTemperatureC = -45.0f + 175.0f * (1.0f * (*temperature) / 65535.0f);
  65. dev->lastHumidityPct = 100.0f * (1.0f * (*humidity) / 65535.0f);
  66. dev->warningFlag = 0;
  67. if(dev->lastTemperatureC < 0 || dev->lastTemperatureC > 65)
  68. dev->warningFlag = 1;
  69. else if(dev->lastTemperatureC < -40)
  70. {
  71. dev->warningFlag = 2;
  72. dev->lastTemperatureC = -40;
  73. }
  74. else if(dev->lastTemperatureC > 120)
  75. {
  76. dev->warningFlag = 2;
  77. dev->lastTemperatureC = 120;
  78. }
  79. if(dev->lastHumidityPct < 10 || dev->lastHumidityPct > 90)
  80. dev->warningFlag = 1;
  81. else if(dev->lastHumidityPct < 0)
  82. {
  83. dev->warningFlag = 2;
  84. dev->lastHumidityPct = 0;
  85. }
  86. else if(dev->lastHumidityPct > 100)
  87. {
  88. dev->warningFlag = 2;
  89. dev->lastHumidityPct = 100;
  90. }
  91. }
  92. static int _sht3x_read_data_and_crc(SHT3X_ATY_Dev* dev, uint16_t* temperature, uint16_t* humidity)
  93. {
  94. if(!dev || !dev->i2c_read) return -1;
  95. uint8_t bytes[6] = {0};
  96. int rc = dev->i2c_read(dev->addr, bytes, 6, dev->channel);
  97. if(rc) return rc;
  98. if(!_sht3x_check_crc(bytes, 2, bytes[2]))
  99. *temperature = (uint16_t)((bytes[0] << 8) | bytes[1]);
  100. else return -2;
  101. if(!_sht3x_check_crc(bytes + 3, 2, bytes[5]))
  102. *humidity = (uint16_t)((bytes[3] << 8) | bytes[4]);
  103. else return -3;
  104. _sht3x_value_process(dev, temperature, humidity);
  105. return 0;
  106. }
  107. void SHT3X_InitDev(SHT3X_ATY_Dev* dev, uint8_t addr, uint8_t channel)
  108. {
  109. if(!dev) return;
  110. dev->addr = addr;
  111. dev->channel = channel;
  112. dev->lastTemperatureC = 0.0f;
  113. dev->lastHumidityPct = 0.0f;
  114. dev->warningFlag = 0;
  115. if(dev->lock) dev->lock(1);
  116. SHT3X_StartPeriodicDev(dev, REPEATAB_HIGH, FREQUENCY_10HZ);
  117. for(int i = 0; i < 3; i++)
  118. {
  119. if(dev->delay_ms) dev->delay_ms(110);
  120. (void)SHT3X_ReadMeasurementDev(dev);
  121. }
  122. if(dev->lock) dev->lock(0);
  123. }
  124. void SHT3X_StartPeriodicDev(SHT3X_ATY_Dev* dev, sht3xRepeatability repeatability, sht3xFrequency frequency)
  125. {
  126. if(!dev) return;
  127. if(dev->lock) dev->lock(1);
  128. switch(repeatability)
  129. {
  130. case REPEATAB_LOW:
  131. switch(frequency)
  132. {
  133. case FREQUENCY_HZ5: _sht3x_write_cmd(dev, CMD_MEAS_PERI_05_L); break;
  134. case FREQUENCY_1HZ: _sht3x_write_cmd(dev, CMD_MEAS_PERI_1_L); break;
  135. case FREQUENCY_2HZ: _sht3x_write_cmd(dev, CMD_MEAS_PERI_2_L); break;
  136. case FREQUENCY_4HZ: _sht3x_write_cmd(dev, CMD_MEAS_PERI_4_L); break;
  137. case FREQUENCY_10HZ: _sht3x_write_cmd(dev, CMD_MEAS_PERI_10_L); break;
  138. default: break;
  139. }
  140. break;
  141. case REPEATAB_MEDIUM:
  142. switch(frequency)
  143. {
  144. case FREQUENCY_HZ5: _sht3x_write_cmd(dev, CMD_MEAS_PERI_05_M); break;
  145. case FREQUENCY_1HZ: _sht3x_write_cmd(dev, CMD_MEAS_PERI_1_M); break;
  146. case FREQUENCY_2HZ: _sht3x_write_cmd(dev, CMD_MEAS_PERI_2_M); break;
  147. case FREQUENCY_4HZ: _sht3x_write_cmd(dev, CMD_MEAS_PERI_4_M); break;
  148. case FREQUENCY_10HZ: _sht3x_write_cmd(dev, CMD_MEAS_PERI_10_M); break;
  149. default: break;
  150. }
  151. break;
  152. case REPEATAB_HIGH:
  153. switch(frequency)
  154. {
  155. case FREQUENCY_HZ5: _sht3x_write_cmd(dev, CMD_MEAS_PERI_05_H); break;
  156. case FREQUENCY_1HZ: _sht3x_write_cmd(dev, CMD_MEAS_PERI_1_H); break;
  157. case FREQUENCY_2HZ: _sht3x_write_cmd(dev, CMD_MEAS_PERI_2_H); break;
  158. case FREQUENCY_4HZ: _sht3x_write_cmd(dev, CMD_MEAS_PERI_4_H); break;
  159. case FREQUENCY_10HZ: _sht3x_write_cmd(dev, CMD_MEAS_PERI_10_H); break;
  160. default: break;
  161. }
  162. break;
  163. default: break;
  164. }
  165. if(dev->lock) dev->lock(0);
  166. }
  167. int SHT3X_ReadMeasurementDev(SHT3X_ATY_Dev* dev)
  168. {
  169. if(!dev) return -1;
  170. if(dev->lock) dev->lock(1);
  171. int rc = _sht3x_write_cmd(dev, CMD_FETCH_DATA);
  172. if(rc == 0)
  173. {
  174. uint16_t t = 0, h = 0;
  175. rc = _sht3x_read_data_and_crc(dev, &t, &h);
  176. }
  177. if(dev->lock) dev->lock(0);
  178. return rc;
  179. }
  180. int SHT3X_GetTempAndHumiClkStretchDev(SHT3X_ATY_Dev* dev, sht3xRepeatability repeatability)
  181. {
  182. if(!dev) return -1;
  183. if(dev->lock) dev->lock(1);
  184. switch(repeatability)
  185. {
  186. case REPEATAB_LOW: _sht3x_write_cmd(dev, CMD_MEAS_CLOCKSTR_L); break;
  187. case REPEATAB_MEDIUM: _sht3x_write_cmd(dev, CMD_MEAS_CLOCKSTR_M); break;
  188. case REPEATAB_HIGH: _sht3x_write_cmd(dev, CMD_MEAS_CLOCKSTR_H); break;
  189. default: break;
  190. }
  191. uint16_t t = 0, h = 0;
  192. int rc = _sht3x_read_data_and_crc(dev, &t, &h);
  193. if(dev->lock) dev->lock(0);
  194. return rc;
  195. }
  196. float SHT3X_GetTemperatureCDev(const SHT3X_ATY_Dev* dev)
  197. {
  198. return dev ? dev->lastTemperatureC : 0.0f;
  199. }
  200. float SHT3X_GetHumidityPctDev(const SHT3X_ATY_Dev* dev)
  201. {
  202. return dev ? dev->lastHumidityPct : 0.0f;
  203. }
  204. uint8_t SHT3X_GetWarningFlagDev(const SHT3X_ATY_Dev* dev)
  205. {
  206. return dev ? dev->warningFlag : 0;
  207. }
  208. /******************************* For user *************************************/
  209. /******************************************************************************/
  210. #if 0 /* legacy implementation disabled in Dev refactor */
  211. float temperatureSHT3X = 0.0;
  212. float humiditySHT3X = 0.0;
  213. /* 0: 0-65T, 10-90H, Best accuracy
  214. 1: -40-0/65-120T, 0-10/90-100H, not good accuracy, warning
  215. 2: out of limit data, error
  216. */
  217. uint8_t warningFlag = 0;
  218. /**
  219. * @brief calc crc with SHT3X data
  220. * @param sht3xData data to calc
  221. * @param nbrOfBytes length of data to calc
  222. * @return uint8_t crc value
  223. */
  224. uint8_t SHT3X_CalcCrc(uint8_t* sht3xData, uint8_t nbrOfBytes)
  225. {
  226. uint8_t bit_t; // bit mask
  227. uint8_t crc = 0xFF; // calculated checksum
  228. uint8_t byteCtr; // byte counter
  229. // calculates 8-Bit checksum with given polynomial
  230. for(byteCtr = 0; byteCtr < nbrOfBytes; byteCtr++)
  231. {
  232. crc ^= sht3xData[byteCtr];
  233. for(bit_t = 8; bit_t > 0; --bit_t)
  234. {
  235. if(crc & 0x80)
  236. crc = (crc << 1) ^ POLYNOMIAL;
  237. else
  238. crc = (crc << 1);
  239. }
  240. }
  241. return crc;
  242. }
  243. /**
  244. * @brief check crc with SHT3X data
  245. * @param sht3xData data to check
  246. * @param nbrOfBytes length of data to check
  247. * @param checksum compare value with calculated crc
  248. * @return !0: wrong, 0: success
  249. */
  250. uint8_t SHT3X_CheckCrc(uint8_t* sht3xData, uint8_t nbrOfBytes, uint8_t checksum)
  251. {
  252. // calculates 8-Bit checksum
  253. uint8_t crc = SHT3X_CalcCrc(sht3xData, nbrOfBytes);
  254. if(crc != checksum)
  255. return 1;
  256. else
  257. return 0;
  258. }
  259. /**
  260. * @brief write command to SHT3X
  261. * @param cmd command to send
  262. * @param addr chip address
  263. * @param channel chip channel
  264. */
  265. void SHT3X_WriteCommand(sht3xCommands cmd, uint8_t addr, uint8_t channel)
  266. {
  267. uint8_t cmd_t[2];
  268. cmd_t[0] = cmd >> 8;
  269. cmd_t[1] = cmd & 0xFF;
  270. I2C_Write(addr, cmd_t, 2, channel);
  271. }
  272. /**
  273. * @brief start periodic measurment
  274. * @param repeatability repeatability
  275. * @param frequency frequency
  276. * @param addr chip address
  277. * @param channel chip channel
  278. * @note use depending on the required repeatability and frequency,
  279. * the corresponding command
  280. */
  281. void SHT3X_StartPeriodicMeasurment(sht3xRepeatability repeatability, sht3xFrequency frequency, uint8_t addr, uint8_t channel)
  282. {
  283. switch(repeatability)
  284. {
  285. case REPEATAB_LOW: // low repeatability
  286. switch(frequency)
  287. {
  288. case FREQUENCY_HZ5: // low repeatability, 0.5 Hz
  289. SHT3X_WriteCommand(CMD_MEAS_PERI_05_L, addr, channel);
  290. break;
  291. case FREQUENCY_1HZ: // low repeatability, 1.0 Hz
  292. SHT3X_WriteCommand(CMD_MEAS_PERI_1_L, addr, channel);
  293. break;
  294. case FREQUENCY_2HZ: // low repeatability, 2.0 Hz
  295. SHT3X_WriteCommand(CMD_MEAS_PERI_2_L, addr, channel);
  296. break;
  297. case FREQUENCY_4HZ: // low repeatability, 4.0 Hz
  298. SHT3X_WriteCommand(CMD_MEAS_PERI_4_L, addr, channel);
  299. break;
  300. case FREQUENCY_10HZ: // low repeatability, 10.0 Hz
  301. SHT3X_WriteCommand(CMD_MEAS_PERI_10_L, addr, channel);
  302. break;
  303. default:
  304. break;
  305. }
  306. break;
  307. case REPEATAB_MEDIUM: // medium repeatability
  308. switch(frequency)
  309. {
  310. case FREQUENCY_HZ5: // medium repeatability, 0.5 Hz
  311. SHT3X_WriteCommand(CMD_MEAS_PERI_05_M, addr, channel);
  312. break;
  313. case FREQUENCY_1HZ: // medium repeatability, 1.0 Hz
  314. SHT3X_WriteCommand(CMD_MEAS_PERI_1_M, addr, channel);
  315. break;
  316. case FREQUENCY_2HZ: // medium repeatability, 2.0 Hz
  317. SHT3X_WriteCommand(CMD_MEAS_PERI_2_M, addr, channel);
  318. break;
  319. case FREQUENCY_4HZ: // medium repeatability, 4.0 Hz
  320. SHT3X_WriteCommand(CMD_MEAS_PERI_4_M, addr, channel);
  321. break;
  322. case FREQUENCY_10HZ: // medium repeatability, 10.0 Hz
  323. SHT3X_WriteCommand(CMD_MEAS_PERI_10_M, addr, channel);
  324. break;
  325. default:
  326. break;
  327. }
  328. break;
  329. case REPEATAB_HIGH: // high repeatability
  330. switch(frequency)
  331. {
  332. case FREQUENCY_HZ5: // high repeatability, 0.5 Hz
  333. SHT3X_WriteCommand(CMD_MEAS_PERI_05_H, addr, channel);
  334. break;
  335. case FREQUENCY_1HZ: // high repeatability, 1.0 Hz
  336. SHT3X_WriteCommand(CMD_MEAS_PERI_1_H, addr, channel);
  337. break;
  338. case FREQUENCY_2HZ: // high repeatability, 2.0 Hz
  339. SHT3X_WriteCommand(CMD_MEAS_PERI_2_H, addr, channel);
  340. break;
  341. case FREQUENCY_4HZ: // high repeatability, 4.0 Hz
  342. SHT3X_WriteCommand(CMD_MEAS_PERI_4_H, addr, channel);
  343. break;
  344. case FREQUENCY_10HZ: // high repeatability, 10.0 Hz
  345. SHT3X_WriteCommand(CMD_MEAS_PERI_10_H);
  346. break;
  347. default:
  348. break;
  349. }
  350. break;
  351. default:
  352. break;
  353. }
  354. }
  355. /**
  356. * @brief calc real value from 16 bit data
  357. * @param temperature temperature 16 bit origin value
  358. * @param humidity humidity 16 bit origin value
  359. */
  360. void SHT3X_ValuePorcess(uint16_t* temperature, uint16_t* humidity)
  361. {
  362. temperatureSHT3X = -45 + 175 * (1.0 * (*temperature) / 65535);
  363. humiditySHT3X = 100 * (1.0 * (*humidity) / 65535);
  364. warningFlag = 0;
  365. if(temperatureSHT3X < 0 || temperatureSHT3X>65)
  366. warningFlag = 1;
  367. else if(temperatureSHT3X < -40)
  368. {
  369. warningFlag = 2;
  370. temperatureSHT3X = -40;
  371. }
  372. else if(temperatureSHT3X > 120)
  373. {
  374. warningFlag = 2;
  375. temperatureSHT3X = 120;
  376. }
  377. if(humiditySHT3X < 10 || humiditySHT3X>90)
  378. warningFlag = 1;
  379. else if(humiditySHT3X < 0)
  380. {
  381. warningFlag = 2;
  382. humiditySHT3X = 0;
  383. }
  384. else if(humiditySHT3X > 100)
  385. {
  386. warningFlag = 2;
  387. humiditySHT3X = 100;
  388. }
  389. }
  390. /**
  391. * @brief read all data from SHT3X
  392. * @param temperature temperature 16 bit origin value
  393. * @param humidity humidity 16 bit origin value
  394. * @param addr chip address
  395. * @param channel chip channel
  396. */
  397. void SHT3X_ReadDataAndCrc(uint16_t* temperature, uint16_t* humidity, uint8_t addr, uint8_t channel)
  398. {
  399. uint8_t bytes[6]; // read 2 data array and 1 checksum byte
  400. // read two data bytes and one checksum byte
  401. I2C_Read(addr, bytes, 6, channel);
  402. // verify checksum then combine the two bytes to a 16-bit value
  403. if(!SHT3X_CheckCrc(bytes, 2, bytes[2]))
  404. *temperature = (bytes[0] << 8) | bytes[1];
  405. // else
  406. // *temperature = 0;
  407. if(!SHT3X_CheckCrc(bytes + 3, 2, bytes[5]))
  408. *humidity = (bytes[3] << 8) | bytes[4];
  409. // else
  410. // *humidity = 0;
  411. SHT3X_ValuePorcess(temperature, humidity);
  412. }
  413. /**
  414. * @brief read data and calc real value
  415. * @param addr chip address
  416. * @param channel chip channel
  417. */
  418. void SHT3X_ReadMeasurementBuffer(uint8_t addr, uint8_t channel)
  419. {
  420. uint16_t hexValueTemp = 0;
  421. uint16_t hexValueHumi = 0;
  422. SHT3X_WriteCommand(CMD_FETCH_DATA, addr, channel);
  423. SHT3X_ReadDataAndCrc(&hexValueTemp, &hexValueHumi, addr, channel);
  424. }
  425. /**
  426. * @brief start measurement in clock stretching mode
  427. * @param repeatability repeatability
  428. * @param addr chip address
  429. * @param channel chip channel
  430. * @note use depending on the required repeatability, the corresponding command
  431. */
  432. void SHT3X_GetTempAndHumiClkStretch(sht3xRepeatability repeatability, uint8_t addr, uint8_t channel)
  433. {
  434. uint16_t hexTempValue = 0;
  435. uint16_t hexHumiValue = 0;
  436. switch(repeatability)
  437. {
  438. case REPEATAB_LOW:
  439. SHT3X_WriteCommand(CMD_MEAS_CLOCKSTR_L, addr, channel);
  440. break;
  441. case REPEATAB_MEDIUM:
  442. SHT3X_WriteCommand(CMD_MEAS_CLOCKSTR_M, addr, channel);
  443. break;
  444. case REPEATAB_HIGH:
  445. SHT3X_WriteCommand(CMD_MEAS_CLOCKSTR_H, addr, channel);
  446. break;
  447. default:
  448. break;
  449. }
  450. SHT3X_ReadDataAndCrc(&hexTempValue, &hexHumiValue, addr, channel);
  451. }
  452. /**
  453. * @brief init SHT3X, check device
  454. * @param addr chip address
  455. * @param channel chip channel
  456. * @note put at main init
  457. */
  458. void SHT3X_InitBegin(uint8_t addr, uint8_t channel)
  459. {
  460. uint8_t i = 0;
  461. SHT3X_StartPeriodicMeasurment(REPEATAB_HIGH, FREQUENCY_10HZ, addr, channel);
  462. for(i = 0; i < 9; i++)
  463. {
  464. DelayMs(110);
  465. SHT3X_ReadMeasurementBuffer(addr, channel);
  466. // SHT3X_GetTempAndHumiClkStretch(REPEATAB_LOW, addr, channel);
  467. }
  468. // SHT3X_StartPeriodicMeasurment(REPEATAB_LOW, FREQUENCY_HZ1, addr, channel);
  469. SHT3X_StartPeriodicMeasurment(REPEATAB_HIGH, FREQUENCY_10HZ, addr, channel);
  470. }
  471. // todo: not tested
  472. // void main()
  473. // {
  474. // SHT3X_InitBegin(addr, channel);
  475. // while(1)
  476. // {
  477. // SHT3X_ReadMeasurementBuffer(addr, channel);
  478. // UartSendStr("\r\nHT: ");
  479. // UartSendStr(TemperatureStr);
  480. // UartSendStr(" - ");
  481. // UartSendStr(HumidityStr);
  482. // DelayMs(2000);
  483. // }
  484. // }
  485. // // declare 5byte group, last with '\0' for show
  486. // uint8_t Temperature[5] = {0, 0, '.', 0};
  487. // uint8_t Humidity[5] = {0, 0, '.', 0};
  488. // uint8_t TemperatureStr[5] = {0, 0, '.', 0};
  489. // uint8_t HumidityStr[5] = {0, 0, '.', 0};
  490. // uint8_t temperatureHexI = 0; // integer
  491. // uint8_t temperatureHexD = 0; // decimal
  492. // uint8_t humidityHexI = 0;
  493. // uint8_t humidityHexD = 0;
  494. // temperature = ((uint8_t)decTempValue << 8) + ((uint16_t)(decTempValue * 100) % 100);
  495. // humidity = ((uint8_t)decHumiValue << 8) + ((uint16_t)(decHumiValue * 100) % 100);
  496. // temperatureHexI = temperature >> 8;
  497. // temperatureHexD = temperature;
  498. // humidityHexI = humidity >> 8;
  499. // humidityHexD = humidity;
  500. // // todo higher than 100 or below 0
  501. // // todo only get origin data, do not change type here
  502. // // todo AHT20 deal the same, and change I2C function to standard
  503. // // if()
  504. // Temperature[0] = temperatureHexI / 10;
  505. // Temperature[1] = temperatureHexI % 10;
  506. // Temperature[3] = temperatureHexD / 10;
  507. // Humidity[0] = humidityHexI / 10;
  508. // Humidity[1] = humidityHexI % 10;
  509. // Humidity[3] = humidityHexD / 10;
  510. // TemperatureStr[0] = Temperature[0] + '0';
  511. // TemperatureStr[1] = Temperature[1] + '0';
  512. // TemperatureStr[3] = Temperature[3] + '0';
  513. // HumidityStr[0] = Humidity[0] + '0';
  514. // HumidityStr[1] = Humidity[1] + '0';
  515. // HumidityStr[3] = Humidity[3] + '0';
  516. #endif /* __SHT3X_ATY_C */
  517. #endif /* legacy implementation disabled in Dev refactor */
  518. /******************************** End Of File *********************************/