Student project, pay no heed.

Dependencies:   MLX90614 RPCInterface adc mbed

Fork of IR_temperature by jim hamblen

Revision:
1:9cd48cdf8681
diff -r bbaf949d2a27 -r 9cd48cdf8681 main2.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main2.cpp	Thu Jan 09 06:59:47 2014 +0000
@@ -0,0 +1,91 @@
+#include "mbed.h"
+#include "mlx90614.h"
+#include "rpc.h"
+#include "adc.h"
+#include "SerialRPCInterface.h"
+
+#define SAMPLE_RATE    150000
+
+
+ADC adc(SAMPLE_RATE, 1);
+// the default address of the infrared sensor (7 bit address + 1 bit for read/write, 0xB4 for write)
+char i2caddress = 0xB4; 
+
+AnalogIn ain(p20); //adc from pin 20
+DigitalOut myled(LED1); //displays I2C wait
+I2C i2c(p28,p27);   //sda,scl
+SerialRPCInterface RPC(USBTX, USBRX); 
+
+bool getTemp(float* temp_val){
+
+    char p1,p2,p3;
+    float temp_thermo;
+    bool ch;
+
+    i2c.stop();                            //stop i2c if not ack
+    wait(0.01);
+    i2c.start();                           //start I2C                   
+    ch=i2c.write(i2caddress);              //device address with write condition
+    
+    if(!ch){
+        return false;
+    }                                        //No Ack, return False
+    
+    ch=i2c.write(0x07);                    //device ram address where Tobj value is present
+
+    if(!ch){
+        return false;
+    }
+
+    i2c.start();                           //repeat start
+    ch=i2c.write(i2caddress|0x01);         //device address with read condition 
+    if(!ch){
+        return false;
+    }
+
+    p1=i2c.read(1);     //Tobj low byte
+    p2=i2c.read(1);     //Tobj heigh byte
+    p3=i2c.read(0);     //PEC
+    
+    i2c.stop();                            //stop condition
+     
+    
+    temp_thermo=((((p2&0x007f)<<8)+p1)*0.02)-0.01;      //degree centigrate conversion
+    *temp_val=temp_thermo-273;                          //Convert kelvin to degree Celsius
+    
+    return true;                            //load data successfully, return true 
+}
+
+
+float IRTemp = 0; //temperature in degrees C
+float AnalogTemp;
+float IRTempTemp;
+
+void anaali(char* input, char* output);
+void digit(char* input, char* output);
+
+RPCFunction rpc_anal(&anaali, "rpc_anal");
+RPCFunction rpc_digi(&digit, "rpc_digi");
+
+           
+int main() {
+
+    wait(1);
+    while (1) {
+        myled=1;
+        if (getTemp(&IRTempTemp)) {
+            myled=0;
+        }
+        wait(0.5);
+        if(IRTempTemp < 150) //discard clearly wrong values from trying to read the sensor when it's not ready
+            IRTemp = IRTempTemp;
+    }
+}
+
+void anaali(char* input, char* output){ 
+    sprintf(output, "%f", (float)ain); //prints the analog sensor value to the output stream
+}
+
+void digit(char* input, char* output){
+    sprintf(output, "%f", IRTemp); //prints the digital sensor value to the output stream
+}
\ No newline at end of file