Team DIANA / Mbed OS Scientific_RTOS

Dependencies:   BOX_1

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers SI7021.cpp Source File

SI7021.cpp

00001 #include "SI7021.h"
00002 
00003 SI7021::SI7021(PinName sda, PinName scl):i2c(sda, scl)
00004 {
00005     i2c.frequency(FREQ);
00006 }
00007 
00008 int32_t SI7021::get_temperature()
00009 {
00010     return tempData;
00011 }
00012 
00013 
00014 uint32_t SI7021::get_humidity()
00015 {
00016     return humData;
00017 }
00018 
00019 bool SI7021::get_data()
00020 {
00021     buff_tx[0] = READ_HUM  ;
00022     if(i2c.write(ADDR, (char*)buff_tx, 1) != 0) return 0;
00023     if(i2c.read(ADDR, (char*)buff_rx, 2) != 0) return 0;
00024 
00025     humData = ((uint32_t)buff_rx[0] << 8) + (buff_rx[1] & 0xFC);
00026     humData = (((humData) * 15625L) >> 13) - 6000;
00027 
00028     buff_tx[0] = READ_TEMP;
00029     if(i2c.write(ADDR, (char*)buff_tx, 1) != 0) return 0;
00030     if(i2c.read(ADDR, (char*)buff_rx, 2) != 0) return 0;
00031 
00032     tempData = ((uint32_t)buff_rx[0] << 8) + (buff_rx[1] & 0xFC);
00033     tempData = (((tempData) * 21965L) >> 13) - 46850;
00034 
00035     return 1;
00036 }
00037 
00038 bool SI7021::check()
00039 {
00040     buff_tx[0] = READ_ID2_1;
00041     buff_tx[1] = READ_ID2_2;
00042     if(i2c.write(ADDR, (char*)buff_tx, 2) != 0) return 0;
00043     if(i2c.read(ADDR, (char*)buff_rx, 8) != 0) return 0;
00044 
00045     if(buff_rx[0] == DEVICE_ID)
00046         return true;
00047     else return 0;
00048 }