I2C&ThermalSensor

Dependents:   COG4050_blink COG4050_adxl35x_adxrs290 COG4050_adxrs290_adxrs453 COG4050_adxl355_adxl357 ... more

Revision:
0:74a0756399ff
Child:
1:0901bc032f82
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Jun 05 13:03:07 2018 +0000
@@ -0,0 +1,97 @@
+#include "mbed.h"
+
+#define ADT7420 0x48
+
+#define RESET_REG 0x2F
+#define TEMP_REG 0x00
+#define ID_REG 0x0B
+
+
+DigitalOut led1(LED1);
+DigitalOut sensor(D8);
+
+I2C Myi2c(I2C_SDA, I2C_SCL);
+
+Serial pc(USBTX, USBRX);
+
+void ADT7420_reset(void);
+int ADT7420_GetID(void);
+int ADT7420_GetTemp(void);
+
+// main() runs in its own thread in the OS
+int main() {
+    float status;
+    int res;
+    sensor=1;
+    //configure for UART
+    pc.baud(115200);
+    pc.printf("I2C ADT7420 Demo\n");
+   
+    //configure for I2C @400KHz
+    Myi2c.frequency(100000);
+   
+    //configure for ADT7420
+    
+    pc.printf("[RESET ] ADT7420\n"); 
+    ADT7420_reset();
+    wait(0.5);
+
+    pc.printf("[CHECK ID] ADT7420\n"); 
+    ADT7420_GetID();
+
+    
+    while (true) {
+        led1 = 0;
+        
+        pc.printf("[Get Temp] ADT7420\n"); 
+        res = ADT7420_GetTemp();
+        
+        if(res & 0x1000)
+        {
+            status = (float)((res - 8192) / 16);
+        }
+        else
+        {
+            status = (float)(res / 16);
+        }
+        
+        pc.printf("Current Temp %.0f \n", status);
+            
+        wait(0.5);
+        led1 = 1;
+        wait(0.5);
+    }
+    
+}
+
+void ADT7420_reset(void)
+{
+    char cmd_reset[1];
+    cmd_reset[0] = RESET_REG;
+    Myi2c.write(ADT7420, cmd_reset, 1);
+}
+    
+int ADT7420_GetID(void)
+{
+    char cmd_id[1], read_val;
+    cmd_id[0]=ID_REG;
+    Myi2c.write(ADT7420, cmd_id, 1, 1);
+    Myi2c.read(ADT7420, &read_val, 1);
+    pc.printf("ID %02x\n", read_val);
+    return read_val;
+}
+
+int ADT7420_GetTemp(void)
+{
+    char cmd_temp[1], read_val[2];
+    int temp=0;
+    cmd_temp[0]=TEMP_REG;
+    Myi2c.write(ADT7420, cmd_temp, 1, 1);
+    Myi2c.read(ADT7420, read_val, 2);
+    pc.printf("Temp Upper %02x\n", read_val[0]);
+    pc.printf("Temp Lower %02x\n", read_val[1]);
+    
+    temp = (int)((read_val[0] << 8) | read_val[1]);
+    temp >>= 3;
+    return temp;
+}