Sensing Data Error Correction

Dependencies:   C12832 LM75B MMA7660 USBHost USBHost_CAN_communication mbed

Fork of USBHost_CAN_communication by nansol Park

Revision:
10:e9fa6f47194f
Parent:
9:4b959b2974fd
--- a/main.cpp	Tue Jan 20 03:04:50 2015 +0000
+++ b/main.cpp	Tue Feb 17 05:34:01 2015 +0000
@@ -1,157 +1,102 @@
 #include "mbed.h"
-#include "LM75B.h"
 #include "C12832.h"
 #include "rtos.h"
 #include "MMA7660.h"
 #include "USBHostMSD.h"
 
+
 //3-Axis Sensor port setting
 MMA7660 MMA(p28, p27);
-//Temperature Sensor port setting
-LM75B sensor(p28,p27);
-//LED setting connecting 3-Axis Sensor
-DigitalOut MMA_X(LED2);
-DigitalOut MMA_Y(LED3);
-DigitalOut MMA_Z(LED4);
+
 //Serial port setting with PC
 Serial pc(USBTX,USBRX);
 //LCD port setting
 C12832 lcd(p5, p7, p6, p8, p11);
 //LED setting connecting Temperature Sensor
 DigitalOut led1(LED1);
-//CAN port setting
-CAN can1(p9, p10);
- 
+DigitalOut led2(LED2);
 
+float temper[3],abs1[1000];
+long int counter, counter1=0;
+int i;
 
-char counter, counter1, enter;
-float temp;
-float sensor_1[3],temper[4];
 
 void msd_task(void const *) {
     
     USBHostMSD msd("usb");
-    
-    while(1) {
+    float comp1[10] = {1.453, 0.141, -0.281, 0.047, -0.375, 1.453, 1.453, 0.797, 0.750, 0.797};
+    float comp2[10] = {1.453, 0.844, 0.234, 0.188, -0.281, 0.656, 1.453, 1.031, 0.750, 0.703};
+    float comp3[10] = {1.453, 1.453, -0.375, 0.188, 0.141, -0.469, 1.453, 1.453, 0.750, 0.844};
+    float comp4[10] = {1.453, 1.406, -0.141, 0.141, 0.469, -0.047, -0.234, 1.453, 1.219, 0.891};
+     while(1){
         
         // try to connect a MSD device
         while(!msd.connect()) {
-            Thread::wait(500);
+            Thread::wait(1000);
         }
         
+        FILE * fp = fopen("/usb/temp.csv", "w");
+        
         // in a loop, append a file
         // if the device is disconnected, we try to connect it again
-        while(1) {
+        for(i=0; i<1000; i++) {
             
-            temper[0]=sensor.read();
-            temper[1]=(float)MMA.x();
-            temper[2]=(float)MMA.y();
-            temper[3]=(float)MMA.z();
+            counter++;
+            //temper[2]=(float)MMA.z();
             
             // append a file
-            FILE * fp = fopen("/usb/temp.txt", "a");
+            FILE * fp = fopen("/usb/temp.csv", "a");
         
             if (fp != NULL) {
-                fprintf(fp, "Temper : %.3f x : %.3f y : %.3f z:%.3f \r\n", temper[0], temper[1], temper[2], temper[3]);
-                printf("Goodbye World!\r\n");
-                fclose(fp);
+                if((i<52&&i>=42)||(i<113&&i>=103)||(i<151&&i>=141)||(i<214&&i>=204)||(i<287&&i>=277)||(i<314&&i>=304)||(i<388&&i>=378)||(i<417&&i>=407)||(i<485&&i>=475)||(i<553&&i>=543)){
+                    abs1[i]=(float)MMA.z()-comp1[i];
+                }
+                else{
+                    abs1[i]=(float)MMA.z()-0.985;
+                    }
+                if((abs1[i]<0.215)&&((abs1[i-1]+abs1[i-2])/2)>-0.285){
+                    fprintf(fp, "%ld,%.3f\n", counter, abs1[i]);
+                    fclose(fp);
+                    }
+                else {
+                    if((((abs1[i-1]+abs1[i-2]+abs1[i-3])/3)>-0.235)||(abs1[i-1]>-0.085)){
+                        fprintf(fp, "%ld,%.3f\n", counter, abs1[i]);
+                        fclose(fp);
+                }
+                    else{
+                        led2=!led2;
+                        counter1++;
+                        fprintf(fp, "%ld,%.3f,%ld\n", counter, abs1[i],counter1);
+                        fclose(fp);
+                        }
+                    }
             } else {
                 printf("FILE == NULL\r\n");
             }
+            if(i==999){
+                i=0;
+                }
             
-            Thread::wait(1500);
+            Thread::wait(100);
         
             // if device disconnected, try to connect again
             if (!msd.connected())
                 break;
         }
-            
     }
 }
-//X-Axis thread
-void led1_thread(void const *args){
-    
-    MMA_X = 0;
-    while(1){
-        sensor_1[0]=(float)MMA.x();
-        if(sensor_1[0]>0.3) {
-            MMA_X = 1;
-            wait(1);
-            MMA_X = 0; 
-        }
-        Thread::wait(100);
-    }
-}
-//Y-Axis thread
-void led2_thread(void const *args){
-    
-    MMA_Y = 0;
-    while(1){
-        sensor_1[1]=(float)MMA.y();
-        if(sensor_1[1]>0.5) {
-            MMA_Y = 1;
-            wait(1);
-            MMA_Y = 0; 
-        }
-        Thread::wait(100);
-    }
-}
-//Z-Axis thread
-void led3_thread(void const *args){
-    
-    MMA_Z = 0;
-    while(1){
-        sensor_1[2]=(float)MMA.z();
-        if(sensor_1[2]<0.5) {
-            MMA_Z = 1;
-            wait(1);
-            MMA_Z = 0; 
-        }
-        Thread::wait(100);
-    }
-}
-//Float to Integer
-int getInteger(float n)
-{
-    return (int)n;
-}
-//Getting Fracting of Float
-int getFraction(float n)
-{
-    float a;
-    a = n-getInteger(n);
-    a = a*100;
-    return (int)a;
-}
 
 int main() {
     Thread msdTask(msd_task, NULL, osPriorityNormal, 1024 * 4);
-    //Declare thread of 3-Axis
-    Thread thread1(led1_thread);
-    Thread thread2(led2_thread);
-    Thread thread3(led3_thread);
     //Check connecting of 3-Axis
     if (MMA.testConnection()) printf("Sensor connect \n");
     while(1){
-        temp=sensor.read();
-        counter=getInteger(temp);
-        counter1=getFraction(temp);
-        enter='1';
         lcd.cls();
         lcd.locate(0,3);
-        lcd.printf("Temp = %.3f\n", temp);
-
-        can1.write(CANMessage(1337, &counter, 1));
-        wait(0.2);
+        lcd.printf("counter = %ld \n", counter);
 
-        can1.write(CANMessage(1337, &counter1, 1));
-        wait(0.2);
-
-        can1.write(CANMessage(1337, &enter, 1));
-        
-        printf("Message sent : %d.%d \n", counter, counter1);
         led1 = !led1;
-        wait(0.2);
+        wait(0.1);
     }
 
 }