library for ADT7410 temperature sensor first version

Revision:
2:d12dffd027a8
Parent:
1:131a836c6b79
Child:
3:41839eb9229f
--- a/adt7410.cpp	Sat Apr 26 18:12:59 2014 +0000
+++ b/adt7410.cpp	Sun Apr 27 19:05:13 2014 +0000
@@ -1,6 +1,11 @@
 #include "adt7410.h"
 
- ADT7410::ADT7410(PinName sda, PinName scl, int address):m_i2c(sda,scl), m_addr(address){}
+ 
+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){
@@ -8,15 +13,74 @@
     char temp[2];
     temp[0]=regAddress;
     temp[1]=data;
-    return m_i2c.write(ADT7410_I2C_ADDRESS,temp,2);
+    return i2c.write(ADT7410_I2C_ADDRESS,temp,2)==0;
 }
 
 
 
+
 int ADT7410::read(uint8_t regAddress, uint8_t *data,int length){
     
-    m_i2c.write(ADT7410_I2C_ADDRESS,(char*)&regAddress,1);
-    return m_i2c.read(ADT7410_I2C_ADDRESS,(char*)data,length)==0;
+    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;
     
-    }
\ No newline at end of file
+      if(i2c.write(i2cAddr,(char*)&regAddress,1)) return -1;
+      if(i2c.read(i2cAddr,(char*)&data,1)) return -1;
+      
+      else
+      return data;
+  
+    
+}
\ No newline at end of file