Sending MMA7660 & LM75B sensor value to the USB, another device by CAN. And we can view temperature of LM75B by C12832 LCD.
Dependencies: C12832 LM75B MMA7660 USBHost mbed USBHost_CAN_communication
Dependents: USBHost_CAN_communication USBHost_CAN_communication_v1
Fork of USBHostMSD_HelloWorld by
main.cpp@9:4b959b2974fd, 2015-01-20 (annotated)
- 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?
User | Revision | Line number | New 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 | } |