Sensing Data Error Correction

Dependencies:   C12832 LM75B MMA7660 USBHost USBHost_CAN_communication mbed

Fork of USBHost_CAN_communication by nansol Park

main.cpp

Committer:
akinansori
Date:
2015-01-20
Revision:
9:4b959b2974fd
Parent:
4:f8a5c8aa895a
Child:
10:e9fa6f47194f

File content as of revision 9:4b959b2974fd:

#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);
 


char counter, counter1, enter;
float temp;
float sensor_1[3],temper[4];

void msd_task(void const *) {
    
    USBHostMSD msd("usb");
    
    while(1) {
        
        // try to connect a MSD device
        while(!msd.connect()) {
            Thread::wait(500);
        }
        
        // in a loop, append a file
        // if the device is disconnected, we try to connect it again
        while(1) {
            
            temper[0]=sensor.read();
            temper[1]=(float)MMA.x();
            temper[2]=(float)MMA.y();
            temper[3]=(float)MMA.z();
            
            // append a file
            FILE * fp = fopen("/usb/temp.txt", "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);
            } else {
                printf("FILE == NULL\r\n");
            }
            
            Thread::wait(1500);
        
            // 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);

        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);
    }

}