BLE sensor for temperature and humidity using Si7021 and photocell.

Dependencies:   BLE_API mbed nRF51822

Committer:
electronichamsters
Date:
Sun Sep 24 06:18:49 2017 +0000
Revision:
12:45c2bb8231bf
tested.  works.

Who changed what in which revision?

UserRevisionLine numberNew 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 }