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*)&regAddress,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*)&regAddress,1)) return -1;
      if(i2c.read(i2cAddr,(char*)&data,1)) return -1;
      
      else
      return data;
  
    
}