library for ADT7410 temperature sensor first version
adt7410.cpp
- Committer:
- igbt6
- Date:
- 2014-04-27
- Revision:
- 2:d12dffd027a8
- Parent:
- 1:131a836c6b79
- Child:
- 3:41839eb9229f
File content as of revision 2:d12dffd027a8:
#include "adt7410.h" ADT7410::ADT7410(PinName sda, PinName scl, int i2cFrequencyHz, int address,CONF_RESOLUTION res ):i2c(sda,scl), i2cAddr(address), resolution(res){ i2c.frequency(i2cFrequencyHz); } bool ADT7410::write(uint8_t regAddress, uint8_t data){ char temp[2]; temp[0]=regAddress; temp[1]=data; return i2c.write(ADT7410_I2C_ADDRESS,temp,2)==0; } int ADT7410::read(uint8_t regAddress, uint8_t *data,int length){ i2c.write(i2cAddr,(char*)®Address,1); return i2c.read(i2cAddr,(char*)data,length)==0; } //configuration of ADT7410 sensor int ADT7410::initADT7410(CONF_FAULT_QUEUE faultQueue, CONF_CT_PIN_POLARITY ctPinPolarity, CONF_INT_PIN_POLARITY intPinPolarity, CONF_INT_CT_MODE intCtMode, CONF_OPERATION_MODE operMode, CONF_RESOLUTION res){ uint8_t confByte=0; int retVal=0; confByte=(res<<7|operMode<<5|intCtMode<<4|intPinPolarity<<3|ctPinPolarity<<2|faultQueue); if(!write(0x03,confByte))retVal=-1; else retVal=1; return retVal; } // read 13 bit temperature int ADT7410::readTemp(float* temperature){ char rData[2] = {0,0}; float tFin = 0; int tRaw = 0; // set address pointer to temperature register if(i2c.write(i2cAddr, 0x00, 1))return -1; // read temperature register, two bytes if(i2c.read(i2cAddr, rData, 2))return -1; // temperature returned is only 13 bits // discard alarm flags in lower bits tRaw = (rData[0] << 8) | (rData[1]); tRaw >>= 3; // handle positive and negative temperatures // results in two's complement if ( tRaw & 0x1000) { tFin = (float) (tRaw - 8192) / 16; } else { tFin = (float) tRaw / 16; } *temperature=tFin; return 1; } int ADT7410::getIdNumber(void){ uint8_t data=0; uint8_t regAddress=0x0B; if(i2c.write(i2cAddr,(char*)®Address,1)) return -1; if(i2c.read(i2cAddr,(char*)&data,1)) return -1; else return data; }