Library of Temperature/Humidity Sensor from Silicon Labs for LPC1768 Editing from SILABS_RHT library
Dependents: F-CubeSatKit4 Xbee-Smart-Home-Inside TBSense2_Sensor_Demo TempHuminitysensor ... more
Si7021.cpp@0:d3514bc63a39, 2016-01-22 (annotated)
- Committer:
- irsanjul
- Date:
- Fri Jan 22 08:56:27 2016 +0000
- Revision:
- 0:d3514bc63a39
Library of Temperature/Humidity Sensor from Silicon Labs for LPC1768; Editing from SILABS_RHT library
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
irsanjul | 0:d3514bc63a39 | 1 | #include "Si7021.h" |
irsanjul | 0:d3514bc63a39 | 2 | |
irsanjul | 0:d3514bc63a39 | 3 | Si7021::Si7021(PinName sda, PinName scl):i2c(sda, scl) |
irsanjul | 0:d3514bc63a39 | 4 | { |
irsanjul | 0:d3514bc63a39 | 5 | i2c.frequency(FREQ); |
irsanjul | 0:d3514bc63a39 | 6 | } |
irsanjul | 0:d3514bc63a39 | 7 | |
irsanjul | 0:d3514bc63a39 | 8 | Si7021::~Si7021() |
irsanjul | 0:d3514bc63a39 | 9 | { |
irsanjul | 0:d3514bc63a39 | 10 | |
irsanjul | 0:d3514bc63a39 | 11 | } |
irsanjul | 0:d3514bc63a39 | 12 | |
irsanjul | 0:d3514bc63a39 | 13 | int32_t Si7021::get_temperature() |
irsanjul | 0:d3514bc63a39 | 14 | { |
irsanjul | 0:d3514bc63a39 | 15 | return tData; |
irsanjul | 0:d3514bc63a39 | 16 | } |
irsanjul | 0:d3514bc63a39 | 17 | |
irsanjul | 0:d3514bc63a39 | 18 | uint32_t Si7021::get_humidity() |
irsanjul | 0:d3514bc63a39 | 19 | { |
irsanjul | 0:d3514bc63a39 | 20 | return rhData; |
irsanjul | 0:d3514bc63a39 | 21 | } |
irsanjul | 0:d3514bc63a39 | 22 | |
irsanjul | 0:d3514bc63a39 | 23 | bool Si7021::measure() |
irsanjul | 0:d3514bc63a39 | 24 | { |
irsanjul | 0:d3514bc63a39 | 25 | tx_buff[0] = READ_RH; |
irsanjul | 0:d3514bc63a39 | 26 | if(i2c.write(ADDR, (char*)tx_buff, 1) != 0) return 0; |
irsanjul | 0:d3514bc63a39 | 27 | if(i2c.read(ADDR, (char*)rx_buff, 2) != 0) return 0; |
irsanjul | 0:d3514bc63a39 | 28 | |
irsanjul | 0:d3514bc63a39 | 29 | rhData = ((uint32_t)rx_buff[0] << 8) + (rx_buff[1] & 0xFC); |
irsanjul | 0:d3514bc63a39 | 30 | rhData = (((rhData) * 15625L) >> 13) - 6000; |
irsanjul | 0:d3514bc63a39 | 31 | |
irsanjul | 0:d3514bc63a39 | 32 | tx_buff[0] = READ_TEMP; |
irsanjul | 0:d3514bc63a39 | 33 | if(i2c.write(ADDR, (char*)tx_buff, 1) != 0) return 0; |
irsanjul | 0:d3514bc63a39 | 34 | if(i2c.read(ADDR, (char*)rx_buff, 2) != 0) return 0; |
irsanjul | 0:d3514bc63a39 | 35 | |
irsanjul | 0:d3514bc63a39 | 36 | tData = ((uint32_t)rx_buff[0] << 8) + (rx_buff[1] & 0xFC); |
irsanjul | 0:d3514bc63a39 | 37 | tData = (((tData) * 21965L) >> 13) - 46850; |
irsanjul | 0:d3514bc63a39 | 38 | |
irsanjul | 0:d3514bc63a39 | 39 | return 1; |
irsanjul | 0:d3514bc63a39 | 40 | } |
irsanjul | 0:d3514bc63a39 | 41 | |
irsanjul | 0:d3514bc63a39 | 42 | bool Si7021::check() |
irsanjul | 0:d3514bc63a39 | 43 | { |
irsanjul | 0:d3514bc63a39 | 44 | tx_buff[0] = READ_ID2_1; |
irsanjul | 0:d3514bc63a39 | 45 | tx_buff[1] = READ_ID2_2; |
irsanjul | 0:d3514bc63a39 | 46 | if(i2c.write(ADDR, (char*)tx_buff, 2) != 0) return 0; |
irsanjul | 0:d3514bc63a39 | 47 | if(i2c.read(ADDR, (char*)rx_buff, 8) != 0) return 0; |
irsanjul | 0:d3514bc63a39 | 48 | |
irsanjul | 0:d3514bc63a39 | 49 | if(rx_buff[0] == DEVICE_ID) |
irsanjul | 0:d3514bc63a39 | 50 | return true; |
irsanjul | 0:d3514bc63a39 | 51 | else return 0; |
irsanjul | 0:d3514bc63a39 | 52 | } |