HDC1080 sensor library
HDC1080.cpp
- Committer:
- shivanandgowdakr
- Date:
- 2018-10-06
- Revision:
- 0:fdb750cc9ca8
- Child:
- 1:a0e46d956969
File content as of revision 0:fdb750cc9ca8:
#include "mbed.h" #include "HDC1080.h" #define HDC_TEMP_OFF 0x00 #define HDC_HUMID_OFF 0x01 #define HDC_CONFIG_OFF 0x02 #define HDC_MANID_OFF 0xFE #define HDC_SER_OFF_FIRST 0xFB #define HDC_SER_OFF_MID 0xFC #define HDC_SER_OFF_LAST 0xFD #define I2C_FREQ 100000 #define CHIP_ADDRESS (0x40 << 1) // left shift 1 bit for 7 bit address required by // Shift by one bit to get 7 bit I2C Addrress char HDC_COMMN = HDC_MANID_OFF; const float HDC_CHIP_ERROR = -255; const unsigned long HDC_CHIP_SER_ERROR = 0; char Buffer[5]; HDC1080::HDC1080(PinName sda, PinName slc) : I2C(sda,slc) { memset(Buffer,'\0',5); Buffer[0] = HDC_CONFIG_OFF; this->frequency(I2C_FREQ); int res = this->write(CHIP_ADDRESS, Buffer, 2); printf("HDC Constructor Initialization : Res =%d\r\n", res); } int HDC1080::ReadSignature(void) { uint16_t Manufacturer_ID = read2Bytes(CHIP_ADDRESS, HDC_MANID_OFF); if (Manufacturer_ID == 0) { printf("Error reading HDC Manufacturer ID\r\n"); return (int) HDC_CHIP_ERROR; } else { printf("Manufacturer_ID :%x\r\n", (int) Manufacturer_ID); return Manufacturer_ID; } } float HDC1080::readTemperature() { uint16_t rawT = read2Bytes(CHIP_ADDRESS, HDC_TEMP_OFF); if (rawT == 0) { printf("error in reading chip Temp\r\n"); return HDC_CHIP_ERROR; } else { float temp = ((float) rawT / pow(2.0f, 16.0f)) * 165.0f - 40.0f; printf("Temperature : %0.3f\r\n", temp); return temp; } } float HDC1080::readHumidity() { uint16_t rawH = read2Bytes(CHIP_ADDRESS, HDC_HUMID_OFF); if (rawH == 0) { printf("error in reading chip Temp\r\n"); return HDC_CHIP_ERROR; } else { float humidity = ((float) rawH / pow(2.0f, 16.0f)) * 100.0f; printf("Humidity : %0.3f\r\n", humidity); return humidity; } } unsigned long HDC1080::readSerialNumber(void) { wait(0.015); memset(Buffer,0,4); Buffer[0] = HDC_MANID_OFF; int res = this->write(CHIP_ADDRESS, Buffer, 1); if (res != 0) { printf("Error writing chip addr res=%d\r\n", res); return (unsigned long) HDC_CHIP_SER_ERROR; } wait(0.015); memset(Buffer,0,4); res = this->read(CHIP_ADDRESS, Buffer,4); if (res != 0) { printf("Errot reading chip serial res=%d#\r\n", res); return (unsigned long) HDC_CHIP_SER_ERROR; } // unsigned long rawser = Buffer[0] << 16 | Buffer[1] << 8 | Buffer[0]; unsigned long rawser = Buffer[2] << 16 | Buffer[1] << 8 | Buffer[0]; printf("Serial Number is =%lu\r\n", rawser); return rawser; } //Private Member functions uint16_t HDC1080::read2Bytes(int chip_addr, int offset) { memset(Buffer,0,3); // send chip address onto buss Buffer[0] = offset; int res =this->write(chip_addr, Buffer, 1); if (res != 0) { printf("error Communicating to chip %d offst=%d\r\n", chip_addr, offset); return 0; } // read data from chip wait(0.015); memset(Buffer,0,3); res = this->read(CHIP_ADDRESS, Buffer,2); if (res != 0) { printf("error Communicating to chip %d offst=%d\r\n", chip_addr, offset); return 0; } return Buffer[0] << 8 | Buffer[1]; }