library for ADT7410 temperature sensor first version

Revision:
3:41839eb9229f
Parent:
2:d12dffd027a8
Child:
5:d003a86ca20e
--- a/adt7410.cpp	Sun Apr 27 19:05:13 2014 +0000
+++ b/adt7410.cpp	Tue Apr 29 00:35:40 2014 +0000
@@ -1,8 +1,11 @@
 #include "adt7410.h"
 
  
-ADT7410::ADT7410(PinName sda, PinName scl, int i2cFrequencyHz, int address,CONF_RESOLUTION res ):i2c(sda,scl), i2cAddr(address), resolution(res){
+ADT7410::ADT7410(PinName sda, PinName scl, int i2cFrequencyHz, int address,CONF_RESOLUTION res ):i2c(sda,scl), i2cAddr(address){
      i2c.frequency(i2cFrequencyHz);
+     if(res==_16_BIT){
+      setResolution(_16_BIT);  
+     }
     }
 
 
@@ -13,16 +16,16 @@
     char temp[2];
     temp[0]=regAddress;
     temp[1]=data;
-    return i2c.write(ADT7410_I2C_ADDRESS,temp,2)==0;
+    return i2c.write(i2cAddr,temp,2)==0;
 }
 
 
 
-
+//read data from the sensor
 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;
+    if(i2c.read(i2cAddr,(char*)data,length)==0) return 1;
+    return -1;
 }
 
 //configuration of ADT7410 sensor
@@ -39,11 +42,11 @@
     }
 
 // read 13 bit temperature
-int ADT7410::readTemp(float* temperature){
+int ADT7410::readTemp(){
     
     char rData[2] = {0,0};
-    float tFin = 0;
-    int tRaw = 0;
+    float tempFin = 0;
+    int tempRaw = 0;
 
     // set address pointer to temperature register
     if(i2c.write(i2cAddr, 0x00, 1))return -1;
@@ -53,22 +56,44 @@
 
     // 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;
+    tempRaw = (rData[0] << 8) | (rData[1]);
+    if(resolution==_13_BIT){ ////resolution 13 --- bit 0.0625°C
+        tempRaw >>= 3;
+        if ( tempRaw & 0x1000) {
+            tempFin = (float) (tempRaw - 8192) / 16;
+        } 
+        else {
+            tempFin = (float) tempRaw / 16;     
+        }
     }
-     *temperature=tFin;
+    else{  //resolution 16bit --- 0.0078°C.
+        
+        if(tempRaw &0x8000){
+            tempFin =(float) (tempRaw-65536)/128;
+        }
+        else
+            tempFin =(float)tempRaw/128;
+    }
+    
+     currentTemperature=tempFin;
     return 1;
 }
 
 
-
+int ADT7410::setResolution(CONF_RESOLUTION res){
+    
+    uint8_t temp=0;
+    
+    int retVal=0;
+    if(!read(0x03,&temp,1)) return -1;
+         temp|=res<<7;
+        if( !write(0x03,temp))
+         
+      retVal=0;
+     else retVal=1;
+      
+      return retVal; 
+    }
 
 
 int ADT7410::getIdNumber(void){
@@ -76,10 +101,9 @@
     uint8_t data=0;
     uint8_t regAddress=0x0B;
     
-      if(i2c.write(i2cAddr,(char*)&regAddress,1)) return -1;
+      if(i2c.write(i2cAddr,(char*)&regAddress,1,true)) return -1;
       if(i2c.read(i2cAddr,(char*)&data,1)) return -1;
       
-      else
       return data;