Sensing Data Error Correction

Dependencies:   C12832 LM75B MMA7660 USBHost USBHost_CAN_communication mbed

Fork of USBHost_CAN_communication by nansol Park

Committer:
akinansori
Date:
Tue Jan 20 03:04:50 2015 +0000
Revision:
9:4b959b2974fd
Parent:
4:f8a5c8aa895a
Child:
10:e9fa6f47194f
Sending MMA7660 & LM75B sensor value to USB, another device by CAN.
; And We can view temperature of LM75B by C12832 LCD.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
samux 0:0d68fe822228 1 #include "mbed.h"
akinansori 9:4b959b2974fd 2 #include "LM75B.h"
akinansori 9:4b959b2974fd 3 #include "C12832.h"
akinansori 9:4b959b2974fd 4 #include "rtos.h"
akinansori 9:4b959b2974fd 5 #include "MMA7660.h"
samux 0:0d68fe822228 6 #include "USBHostMSD.h"
samux 0:0d68fe822228 7
akinansori 9:4b959b2974fd 8 //3-Axis Sensor port setting
akinansori 9:4b959b2974fd 9 MMA7660 MMA(p28, p27);
akinansori 9:4b959b2974fd 10 //Temperature Sensor port setting
akinansori 9:4b959b2974fd 11 LM75B sensor(p28,p27);
akinansori 9:4b959b2974fd 12 //LED setting connecting 3-Axis Sensor
akinansori 9:4b959b2974fd 13 DigitalOut MMA_X(LED2);
akinansori 9:4b959b2974fd 14 DigitalOut MMA_Y(LED3);
akinansori 9:4b959b2974fd 15 DigitalOut MMA_Z(LED4);
akinansori 9:4b959b2974fd 16 //Serial port setting with PC
akinansori 9:4b959b2974fd 17 Serial pc(USBTX,USBRX);
akinansori 9:4b959b2974fd 18 //LCD port setting
akinansori 9:4b959b2974fd 19 C12832 lcd(p5, p7, p6, p8, p11);
akinansori 9:4b959b2974fd 20 //LED setting connecting Temperature Sensor
akinansori 9:4b959b2974fd 21 DigitalOut led1(LED1);
akinansori 9:4b959b2974fd 22 //CAN port setting
akinansori 9:4b959b2974fd 23 CAN can1(p9, p10);
akinansori 9:4b959b2974fd 24
akinansori 9:4b959b2974fd 25
akinansori 9:4b959b2974fd 26
akinansori 9:4b959b2974fd 27 char counter, counter1, enter;
akinansori 9:4b959b2974fd 28 float temp;
akinansori 9:4b959b2974fd 29 float sensor_1[3],temper[4];
samux 0:0d68fe822228 30
samux 0:0d68fe822228 31 void msd_task(void const *) {
samux 0:0d68fe822228 32
samux 0:0d68fe822228 33 USBHostMSD msd("usb");
samux 0:0d68fe822228 34
samux 0:0d68fe822228 35 while(1) {
samux 0:0d68fe822228 36
samux 1:473f339c54c1 37 // try to connect a MSD device
samux 1:473f339c54c1 38 while(!msd.connect()) {
samux 1:473f339c54c1 39 Thread::wait(500);
samux 1:473f339c54c1 40 }
samux 1:473f339c54c1 41
samux 4:f8a5c8aa895a 42 // in a loop, append a file
samux 4:f8a5c8aa895a 43 // if the device is disconnected, we try to connect it again
samux 1:473f339c54c1 44 while(1) {
samux 1:473f339c54c1 45
akinansori 9:4b959b2974fd 46 temper[0]=sensor.read();
akinansori 9:4b959b2974fd 47 temper[1]=(float)MMA.x();
akinansori 9:4b959b2974fd 48 temper[2]=(float)MMA.y();
akinansori 9:4b959b2974fd 49 temper[3]=(float)MMA.z();
akinansori 9:4b959b2974fd 50
samux 4:f8a5c8aa895a 51 // append a file
akinansori 9:4b959b2974fd 52 FILE * fp = fopen("/usb/temp.txt", "a");
samux 1:473f339c54c1 53
samux 1:473f339c54c1 54 if (fp != NULL) {
akinansori 9:4b959b2974fd 55 fprintf(fp, "Temper : %.3f x : %.3f y : %.3f z:%.3f \r\n", temper[0], temper[1], temper[2], temper[3]);
samux 1:473f339c54c1 56 printf("Goodbye World!\r\n");
samux 1:473f339c54c1 57 fclose(fp);
samux 1:473f339c54c1 58 } else {
samux 1:473f339c54c1 59 printf("FILE == NULL\r\n");
samux 1:473f339c54c1 60 }
samux 1:473f339c54c1 61
akinansori 9:4b959b2974fd 62 Thread::wait(1500);
samux 0:0d68fe822228 63
samux 1:473f339c54c1 64 // if device disconnected, try to connect again
samux 1:473f339c54c1 65 if (!msd.connected())
samux 1:473f339c54c1 66 break;
samux 0:0d68fe822228 67 }
samux 1:473f339c54c1 68
samux 0:0d68fe822228 69 }
samux 0:0d68fe822228 70 }
akinansori 9:4b959b2974fd 71 //X-Axis thread
akinansori 9:4b959b2974fd 72 void led1_thread(void const *args){
akinansori 9:4b959b2974fd 73
akinansori 9:4b959b2974fd 74 MMA_X = 0;
akinansori 9:4b959b2974fd 75 while(1){
akinansori 9:4b959b2974fd 76 sensor_1[0]=(float)MMA.x();
akinansori 9:4b959b2974fd 77 if(sensor_1[0]>0.3) {
akinansori 9:4b959b2974fd 78 MMA_X = 1;
akinansori 9:4b959b2974fd 79 wait(1);
akinansori 9:4b959b2974fd 80 MMA_X = 0;
akinansori 9:4b959b2974fd 81 }
akinansori 9:4b959b2974fd 82 Thread::wait(100);
akinansori 9:4b959b2974fd 83 }
akinansori 9:4b959b2974fd 84 }
akinansori 9:4b959b2974fd 85 //Y-Axis thread
akinansori 9:4b959b2974fd 86 void led2_thread(void const *args){
akinansori 9:4b959b2974fd 87
akinansori 9:4b959b2974fd 88 MMA_Y = 0;
akinansori 9:4b959b2974fd 89 while(1){
akinansori 9:4b959b2974fd 90 sensor_1[1]=(float)MMA.y();
akinansori 9:4b959b2974fd 91 if(sensor_1[1]>0.5) {
akinansori 9:4b959b2974fd 92 MMA_Y = 1;
akinansori 9:4b959b2974fd 93 wait(1);
akinansori 9:4b959b2974fd 94 MMA_Y = 0;
akinansori 9:4b959b2974fd 95 }
akinansori 9:4b959b2974fd 96 Thread::wait(100);
akinansori 9:4b959b2974fd 97 }
akinansori 9:4b959b2974fd 98 }
akinansori 9:4b959b2974fd 99 //Z-Axis thread
akinansori 9:4b959b2974fd 100 void led3_thread(void const *args){
akinansori 9:4b959b2974fd 101
akinansori 9:4b959b2974fd 102 MMA_Z = 0;
akinansori 9:4b959b2974fd 103 while(1){
akinansori 9:4b959b2974fd 104 sensor_1[2]=(float)MMA.z();
akinansori 9:4b959b2974fd 105 if(sensor_1[2]<0.5) {
akinansori 9:4b959b2974fd 106 MMA_Z = 1;
akinansori 9:4b959b2974fd 107 wait(1);
akinansori 9:4b959b2974fd 108 MMA_Z = 0;
akinansori 9:4b959b2974fd 109 }
akinansori 9:4b959b2974fd 110 Thread::wait(100);
akinansori 9:4b959b2974fd 111 }
akinansori 9:4b959b2974fd 112 }
akinansori 9:4b959b2974fd 113 //Float to Integer
akinansori 9:4b959b2974fd 114 int getInteger(float n)
akinansori 9:4b959b2974fd 115 {
akinansori 9:4b959b2974fd 116 return (int)n;
akinansori 9:4b959b2974fd 117 }
akinansori 9:4b959b2974fd 118 //Getting Fracting of Float
akinansori 9:4b959b2974fd 119 int getFraction(float n)
akinansori 9:4b959b2974fd 120 {
akinansori 9:4b959b2974fd 121 float a;
akinansori 9:4b959b2974fd 122 a = n-getInteger(n);
akinansori 9:4b959b2974fd 123 a = a*100;
akinansori 9:4b959b2974fd 124 return (int)a;
akinansori 9:4b959b2974fd 125 }
samux 0:0d68fe822228 126
samux 0:0d68fe822228 127 int main() {
samux 2:3e3df7a79050 128 Thread msdTask(msd_task, NULL, osPriorityNormal, 1024 * 4);
akinansori 9:4b959b2974fd 129 //Declare thread of 3-Axis
akinansori 9:4b959b2974fd 130 Thread thread1(led1_thread);
akinansori 9:4b959b2974fd 131 Thread thread2(led2_thread);
akinansori 9:4b959b2974fd 132 Thread thread3(led3_thread);
akinansori 9:4b959b2974fd 133 //Check connecting of 3-Axis
akinansori 9:4b959b2974fd 134 if (MMA.testConnection()) printf("Sensor connect \n");
akinansori 9:4b959b2974fd 135 while(1){
akinansori 9:4b959b2974fd 136 temp=sensor.read();
akinansori 9:4b959b2974fd 137 counter=getInteger(temp);
akinansori 9:4b959b2974fd 138 counter1=getFraction(temp);
akinansori 9:4b959b2974fd 139 enter='1';
akinansori 9:4b959b2974fd 140 lcd.cls();
akinansori 9:4b959b2974fd 141 lcd.locate(0,3);
akinansori 9:4b959b2974fd 142 lcd.printf("Temp = %.3f\n", temp);
akinansori 9:4b959b2974fd 143
akinansori 9:4b959b2974fd 144 can1.write(CANMessage(1337, &counter, 1));
akinansori 9:4b959b2974fd 145 wait(0.2);
akinansori 9:4b959b2974fd 146
akinansori 9:4b959b2974fd 147 can1.write(CANMessage(1337, &counter1, 1));
akinansori 9:4b959b2974fd 148 wait(0.2);
akinansori 9:4b959b2974fd 149
akinansori 9:4b959b2974fd 150 can1.write(CANMessage(1337, &enter, 1));
akinansori 9:4b959b2974fd 151
akinansori 9:4b959b2974fd 152 printf("Message sent : %d.%d \n", counter, counter1);
akinansori 9:4b959b2974fd 153 led1 = !led1;
akinansori 9:4b959b2974fd 154 wait(0.2);
samux 0:0d68fe822228 155 }
akinansori 9:4b959b2974fd 156
akinansori 9:4b959b2974fd 157 }