BLE sensor for temperature and humidity using Si7021 and photocell.
Dependencies: BLE_API mbed nRF51822
Si7021.cpp@12:45c2bb8231bf, 2017-09-24 (annotated)
- Committer:
- electronichamsters
- Date:
- Sun Sep 24 06:18:49 2017 +0000
- Revision:
- 12:45c2bb8231bf
tested. works.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
electronichamsters | 12:45c2bb8231bf | 1 | #include "Si7021.h" |
electronichamsters | 12:45c2bb8231bf | 2 | |
electronichamsters | 12:45c2bb8231bf | 3 | Si7021::Si7021(PinName sda, PinName scl):i2c(sda, scl) |
electronichamsters | 12:45c2bb8231bf | 4 | { |
electronichamsters | 12:45c2bb8231bf | 5 | i2c.frequency(FREQ); |
electronichamsters | 12:45c2bb8231bf | 6 | } |
electronichamsters | 12:45c2bb8231bf | 7 | |
electronichamsters | 12:45c2bb8231bf | 8 | Si7021::~Si7021() |
electronichamsters | 12:45c2bb8231bf | 9 | { |
electronichamsters | 12:45c2bb8231bf | 10 | |
electronichamsters | 12:45c2bb8231bf | 11 | } |
electronichamsters | 12:45c2bb8231bf | 12 | |
electronichamsters | 12:45c2bb8231bf | 13 | int32_t Si7021::get_temperature() |
electronichamsters | 12:45c2bb8231bf | 14 | { |
electronichamsters | 12:45c2bb8231bf | 15 | return tData; |
electronichamsters | 12:45c2bb8231bf | 16 | } |
electronichamsters | 12:45c2bb8231bf | 17 | |
electronichamsters | 12:45c2bb8231bf | 18 | uint32_t Si7021::get_humidity() |
electronichamsters | 12:45c2bb8231bf | 19 | { |
electronichamsters | 12:45c2bb8231bf | 20 | return rhData; |
electronichamsters | 12:45c2bb8231bf | 21 | } |
electronichamsters | 12:45c2bb8231bf | 22 | |
electronichamsters | 12:45c2bb8231bf | 23 | bool Si7021::measure() |
electronichamsters | 12:45c2bb8231bf | 24 | { |
electronichamsters | 12:45c2bb8231bf | 25 | tx_buff[0] = READ_RH; |
electronichamsters | 12:45c2bb8231bf | 26 | if(i2c.write(ADDR, (char*)tx_buff, 1) != 0) return 0; |
electronichamsters | 12:45c2bb8231bf | 27 | if(i2c.read(ADDR, (char*)rx_buff, 2) != 0) return 0; |
electronichamsters | 12:45c2bb8231bf | 28 | |
electronichamsters | 12:45c2bb8231bf | 29 | rhData = ((uint32_t)rx_buff[0] << 8) + (rx_buff[1] & 0xFC); |
electronichamsters | 12:45c2bb8231bf | 30 | rhData = (((rhData) * 15625L) >> 13) - 6000; |
electronichamsters | 12:45c2bb8231bf | 31 | |
electronichamsters | 12:45c2bb8231bf | 32 | tx_buff[0] = READ_TEMP; |
electronichamsters | 12:45c2bb8231bf | 33 | if(i2c.write(ADDR, (char*)tx_buff, 1) != 0) return 0; |
electronichamsters | 12:45c2bb8231bf | 34 | if(i2c.read(ADDR, (char*)rx_buff, 2) != 0) return 0; |
electronichamsters | 12:45c2bb8231bf | 35 | |
electronichamsters | 12:45c2bb8231bf | 36 | tData = ((uint32_t)rx_buff[0] << 8) + (rx_buff[1] & 0xFC); |
electronichamsters | 12:45c2bb8231bf | 37 | tData = (((tData) * 21965L) >> 13) - 46850; |
electronichamsters | 12:45c2bb8231bf | 38 | |
electronichamsters | 12:45c2bb8231bf | 39 | return 1; |
electronichamsters | 12:45c2bb8231bf | 40 | } |
electronichamsters | 12:45c2bb8231bf | 41 | |
electronichamsters | 12:45c2bb8231bf | 42 | bool Si7021::check() |
electronichamsters | 12:45c2bb8231bf | 43 | { |
electronichamsters | 12:45c2bb8231bf | 44 | tx_buff[0] = READ_ID2_1; |
electronichamsters | 12:45c2bb8231bf | 45 | tx_buff[1] = READ_ID2_2; |
electronichamsters | 12:45c2bb8231bf | 46 | if(i2c.write(ADDR, (char*)tx_buff, 2) != 0) return 0; |
electronichamsters | 12:45c2bb8231bf | 47 | if(i2c.read(ADDR, (char*)rx_buff, 8) != 0) return 0; |
electronichamsters | 12:45c2bb8231bf | 48 | |
electronichamsters | 12:45c2bb8231bf | 49 | if(rx_buff[0] == DEVICE_ID) |
electronichamsters | 12:45c2bb8231bf | 50 | return true; |
electronichamsters | 12:45c2bb8231bf | 51 | else return 0; |
electronichamsters | 12:45c2bb8231bf | 52 | } |