ARLISS2012
Dependencies: mbed-rtos mbed MMA7361L MPL115A2
Fork of rtos_basic by
main.cpp@2:5e02179f4141, 2012-08-22 (annotated)
- Committer:
- AkiraK
- Date:
- Wed Aug 22 03:02:00 2012 +0000
- Revision:
- 2:5e02179f4141
- Parent:
- 1:491820ee784d
- Child:
- 3:b740280416f6
20120822 12:01 add lx & timer;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
AkiraK | 2:5e02179f4141 | 1 | #include "mbed.h" //use mbed basic library <include start |
AkiraK | 2:5e02179f4141 | 2 | #include "MPL115A2.h" // use MPL115A2 library |
AkiraK | 2:5e02179f4141 | 3 | #include "MMA7361L.h" //use MMA7361L library use |
AkiraK | 2:5e02179f4141 | 4 | #include "rtos.h" //use rtos library <include end |
AkiraK | 2:5e02179f4141 | 5 | |
AkiraK | 2:5e02179f4141 | 6 | LocalFileSystem local("local"); //use Local file system <file system define |
AkiraK | 2:5e02179f4141 | 7 | |
AkiraK | 2:5e02179f4141 | 8 | Timer timer; //use timer <which pin does system use?(start) |
AkiraK | 2:5e02179f4141 | 9 | MMA7361L accel(p17, p18, p19, p23, p24, p22); //decide pin number of accel |
AkiraK | 2:5e02179f4141 | 10 | AnalogIn lm60(p20); // decide pin number of tempareture |
AkiraK | 2:5e02179f4141 | 11 | DigitalIn endsw(p5); // decide pin number of end switch |
AkiraK | 2:5e02179f4141 | 12 | DigitalIn startsw(p6); //decide pin number of start switch |
AkiraK | 2:5e02179f4141 | 13 | BusOut leds(LED1, LED2, LED3, LED4); // decide led number of system check |
AkiraK | 2:5e02179f4141 | 14 | AnalogIn hu(p16); // decide pin number of humidity |
AkiraK | 2:5e02179f4141 | 15 | AnalogIn illu(p15); |
AkiraK | 2:5e02179f4141 | 16 | Serial xbee(p28,p27); //decide pin number of xbee and decide Serial using |
AkiraK | 2:5e02179f4141 | 17 | Serial gps(p13, p14); // decide pin number of gps <which pin does system use?(end) |
AkiraK | 2:5e02179f4141 | 18 | |
AkiraK | 2:5e02179f4141 | 19 | float begin, end;// timer define |
AkiraK | 2:5e02179f4141 | 20 | |
AkiraK | 2:5e02179f4141 | 21 | FILE *fp = fopen("/local/cansat.txt", "a"); //file system start, file open <about file system to open "cansat.txt" |
AkiraK | 2:5e02179f4141 | 22 | |
AkiraK | 2:5e02179f4141 | 23 | char gps1[1000]; |
AkiraK | 2:5e02179f4141 | 24 | char GPS[1000]; |
AkiraK | 2:5e02179f4141 | 25 | int timer_count = 0; |
AkiraK | 2:5e02179f4141 | 26 | int xbee_count = 0; |
AkiraK | 2:5e02179f4141 | 27 | bool xbee_flag = false; |
AkiraK | 2:5e02179f4141 | 28 | bool gps_flag = true; //about gps_flag define(true) <gps_define(true) |
AkiraK | 2:5e02179f4141 | 29 | bool gps_get = true; //which gps get or lost |
AkiraK | 2:5e02179f4141 | 30 | bool stateSW = false; //about switch flag define(false) <stateSW(false) |
AkiraK | 2:5e02179f4141 | 31 | int at = 20; // define avarage time <define avarage time |
AkiraK | 2:5e02179f4141 | 32 | |
AkiraK | 2:5e02179f4141 | 33 | void gps_thread(void const *argument) // <gps thread start |
AkiraK | 2:5e02179f4141 | 34 | { |
AkiraK | 2:5e02179f4141 | 35 | while (gps_flag) { //if gps_flag is true, while can run <gps data scan start |
AkiraK | 2:5e02179f4141 | 36 | gps.scanf("%s", gps1); |
AkiraK | 2:5e02179f4141 | 37 | if (gps1[3] == 'R' && gps1[4] == 'M' && gps1[5] == 'C') { //if gps1 is $GPGGA, this program can write data <what data do I want get |
AkiraK | 2:5e02179f4141 | 38 | gps.scanf("%s\r\n", GPS); |
AkiraK | 2:5e02179f4141 | 39 | gps_get = true; |
AkiraK | 2:5e02179f4141 | 40 | } |
AkiraK | 2:5e02179f4141 | 41 | } |
AkiraK | 2:5e02179f4141 | 42 | } |
AkiraK | 2:5e02179f4141 | 43 | |
AkiraK | 2:5e02179f4141 | 44 | int main() |
AkiraK | 2:5e02179f4141 | 45 | { |
AkiraK | 2:5e02179f4141 | 46 | |
AkiraK | 2:5e02179f4141 | 47 | float press_buff = 0; //press buffer is 0 <buff define start |
AkiraK | 2:5e02179f4141 | 48 | float temp_buff = 0; //temparature buffer is 0 |
AkiraK | 2:5e02179f4141 | 49 | float humi_buff = 0; //humidity buffer is 0 |
AkiraK | 2:5e02179f4141 | 50 | float accelx_buff = 0; //accelx buffer is 0 |
AkiraK | 2:5e02179f4141 | 51 | float accely_buff = 0; //accely buffer is 0 |
AkiraK | 2:5e02179f4141 | 52 | float accelz_buff = 0; //accelz buffer is 0 <buff define end |
AkiraK | 2:5e02179f4141 | 53 | |
AkiraK | 2:5e02179f4141 | 54 | accel.setScale(MMA7361L::SCALE_6G); //6g mode |
AkiraK | 2:5e02179f4141 | 55 | accel.calibrate(MMA7361L::SCALE_6G, -0.96, 1.06, -0.78, 1.28, -1.14, 0.78); //calibration of accelation <calibration of accelation |
AkiraK | 2:5e02179f4141 | 56 | |
AkiraK | 2:5e02179f4141 | 57 | MPL115A2 mpl115a2(p9, p10); //define pressure pin number <pressure pin number define |
AkiraK | 2:5e02179f4141 | 58 | |
AkiraK | 2:5e02179f4141 | 59 | //____define of main program(end) |
AkiraK | 2:5e02179f4141 | 60 | |
AkiraK | 2:5e02179f4141 | 61 | //____run main program(start) |
AkiraK | 2:5e02179f4141 | 62 | |
AkiraK | 2:5e02179f4141 | 63 | while (true) { |
AkiraK | 2:5e02179f4141 | 64 | |
AkiraK | 2:5e02179f4141 | 65 | leds = 1; // <led start(if mbed get A) |
AkiraK | 2:5e02179f4141 | 66 | wait(1.0); |
AkiraK | 2:5e02179f4141 | 67 | leds = 0; |
AkiraK | 2:5e02179f4141 | 68 | wait(1.0); |
AkiraK | 2:5e02179f4141 | 69 | |
AkiraK | 2:5e02179f4141 | 70 | if (startsw != stateSW) { //if start switch is pushed bu anyone run <get data start(if push start switch) |
AkiraK | 2:5e02179f4141 | 71 | stateSW = !stateSW; |
AkiraK | 2:5e02179f4141 | 72 | if (stateSW) { |
AkiraK | 2:5e02179f4141 | 73 | |
AkiraK | 2:5e02179f4141 | 74 | timer.start(); //timer start <timer caunt system start |
AkiraK | 2:5e02179f4141 | 75 | begin = timer.read_us(); //timer number read |
AkiraK | 2:5e02179f4141 | 76 | |
AkiraK | 2:5e02179f4141 | 77 | Thread thread(gps_thread); //gps thread run |
AkiraK | 2:5e02179f4141 | 78 | |
AkiraK | 2:5e02179f4141 | 79 | while (true) { |
AkiraK | 2:5e02179f4141 | 80 | |
AkiraK | 2:5e02179f4141 | 81 | leds = 1; |
AkiraK | 2:5e02179f4141 | 82 | press_buff = 0; //pressure buffer reset <buffer reset(start) |
AkiraK | 2:5e02179f4141 | 83 | temp_buff = 0; //temparture buffer reset |
AkiraK | 2:5e02179f4141 | 84 | humi_buff = 0; //humidity buffer reset |
AkiraK | 2:5e02179f4141 | 85 | accelx_buff = 0; //accelx buffer reset |
AkiraK | 2:5e02179f4141 | 86 | accely_buff = 0; //accely buffer reset |
AkiraK | 2:5e02179f4141 | 87 | accelz_buff = 0; //accelz buffer reset <buffer reset(end) |
AkiraK | 2:5e02179f4141 | 88 | leds = 0; |
AkiraK | 2:5e02179f4141 | 89 | leds = 2; |
AkiraK | 2:5e02179f4141 | 90 | |
AkiraK | 2:5e02179f4141 | 91 | for (int i = 0; i < at; i++) { //get data and + 20 times (loop) <get data loop(start) |
AkiraK | 2:5e02179f4141 | 92 | temp_buff += (3.3 * lm60 - 0.424) / 0.00625; //temperture data calculation |
AkiraK | 2:5e02179f4141 | 93 | press_buff += mpl115a2.readPressure(); //pressure get data(this calculation is run by library) |
AkiraK | 2:5e02179f4141 | 94 | humi_buff += hu * 3.3 * 100; //humidity data culculation |
AkiraK | 2:5e02179f4141 | 95 | accelx_buff += accel.getAccelX(); //accelx get |
AkiraK | 2:5e02179f4141 | 96 | accely_buff += accel.getAccelY(); //accely get |
AkiraK | 2:5e02179f4141 | 97 | accelz_buff += accel.getAccelZ(); //accelz get <get data loop(end) |
AkiraK | 2:5e02179f4141 | 98 | wait(0.005); |
AkiraK | 2:5e02179f4141 | 99 | } |
AkiraK | 2:5e02179f4141 | 100 | |
AkiraK | 2:5e02179f4141 | 101 | leds = 0; |
AkiraK | 2:5e02179f4141 | 102 | |
AkiraK | 2:5e02179f4141 | 103 | float tempv = temp_buff / at; // <avarage data(start) |
AkiraK | 2:5e02179f4141 | 104 | float press = press_buff / at; |
AkiraK | 2:5e02179f4141 | 105 | float humi = humi_buff / at; |
AkiraK | 2:5e02179f4141 | 106 | float accelX = accelx_buff / at; |
AkiraK | 2:5e02179f4141 | 107 | float accelY = accely_buff / at; |
AkiraK | 2:5e02179f4141 | 108 | float accelZ = accelz_buff / at; // <avarage data(end) |
AkiraK | 2:5e02179f4141 | 109 | float lx = illu * 3.3 / 3 * 1000; |
AkiraK | 2:5e02179f4141 | 110 | |
AkiraK | 2:5e02179f4141 | 111 | end = timer.read_us(); |
AkiraK | 2:5e02179f4141 | 112 | double timers = (end - begin) / 1000000; |
AkiraK | 2:5e02179f4141 | 113 | |
AkiraK | 2:5e02179f4141 | 114 | if(timers > 2000) { |
AkiraK | 2:5e02179f4141 | 115 | timer_count ++; |
AkiraK | 2:5e02179f4141 | 116 | begin = timer.read_us(); //timer number read |
AkiraK | 2:5e02179f4141 | 117 | } |
AkiraK | 2:5e02179f4141 | 118 | |
AkiraK | 2:5e02179f4141 | 119 | if(lx > 800) { |
AkiraK | 2:5e02179f4141 | 120 | xbee_count ++; |
AkiraK | 2:5e02179f4141 | 121 | |
AkiraK | 2:5e02179f4141 | 122 | if(xbee_count > 5) { |
AkiraK | 2:5e02179f4141 | 123 | xbee_flag = true; |
AkiraK | 2:5e02179f4141 | 124 | } |
AkiraK | 2:5e02179f4141 | 125 | } |
AkiraK | 2:5e02179f4141 | 126 | |
AkiraK | 2:5e02179f4141 | 127 | leds = 4; |
AkiraK | 2:5e02179f4141 | 128 | |
AkiraK | 2:5e02179f4141 | 129 | if (gps_get == false) { |
AkiraK | 2:5e02179f4141 | 130 | fprintf(fp, "$DATA,%4.1f,%4.1f,%2.2f,%2.2f,%2.2f,%4.1f,%4.1f,%5.2f,#end\r\n", timers + timer_count * 2000, tempv, accelX, accelY, accelZ, press, humi,lx); |
AkiraK | 2:5e02179f4141 | 131 | if(xbee_flag == true) { |
AkiraK | 2:5e02179f4141 | 132 | xbee.printf("$DATA,%4.1f,%4.1f,%2.2f,%2.2f,%2.2f,%4.1f,%4.1f,%5.2f,#end\r\n", timers + timer_count * 2000, tempv, accelX, accelY, accelZ, press, humi,lx); |
AkiraK | 2:5e02179f4141 | 133 | } |
AkiraK | 2:5e02179f4141 | 134 | } |
AkiraK | 2:5e02179f4141 | 135 | |
AkiraK | 2:5e02179f4141 | 136 | if (gps_get == true) { |
AkiraK | 2:5e02179f4141 | 137 | leds = 15; |
AkiraK | 2:5e02179f4141 | 138 | if(xbee_flag == true) { |
AkiraK | 2:5e02179f4141 | 139 | xbee.printf("%s,#end\r\n", GPS); //GPS data is dent by xbee <xbee send system(GPS) |
AkiraK | 2:5e02179f4141 | 140 | } |
AkiraK | 2:5e02179f4141 | 141 | fprintf(fp, "%s,#end\r\n", GPS); //GPS data is writen to mbed <write system(GPS) |
AkiraK | 2:5e02179f4141 | 142 | gps_get = false; |
AkiraK | 2:5e02179f4141 | 143 | leds = 0; |
AkiraK | 2:5e02179f4141 | 144 | } |
AkiraK | 2:5e02179f4141 | 145 | |
AkiraK | 2:5e02179f4141 | 146 | leds = 0; |
AkiraK | 2:5e02179f4141 | 147 | leds = 8; |
AkiraK | 2:5e02179f4141 | 148 | |
AkiraK | 2:5e02179f4141 | 149 | wait(0.1); |
AkiraK | 2:5e02179f4141 | 150 | |
AkiraK | 2:5e02179f4141 | 151 | if (endsw != stateSW) { |
AkiraK | 2:5e02179f4141 | 152 | stateSW = !stateSW; |
AkiraK | 2:5e02179f4141 | 153 | |
AkiraK | 2:5e02179f4141 | 154 | if (stateSW) { |
AkiraK | 2:5e02179f4141 | 155 | fclose(fp); |
AkiraK | 2:5e02179f4141 | 156 | timer.stop(); |
AkiraK | 2:5e02179f4141 | 157 | gps_flag = 0; |
AkiraK | 2:5e02179f4141 | 158 | |
AkiraK | 2:5e02179f4141 | 159 | while (true) { |
AkiraK | 2:5e02179f4141 | 160 | leds = 8; |
AkiraK | 2:5e02179f4141 | 161 | wait(1.0); |
AkiraK | 2:5e02179f4141 | 162 | leds = 0; |
AkiraK | 2:5e02179f4141 | 163 | wait(1.0); |
AkiraK | 2:5e02179f4141 | 164 | } |
AkiraK | 2:5e02179f4141 | 165 | |
AkiraK | 2:5e02179f4141 | 166 | } |
AkiraK | 2:5e02179f4141 | 167 | |
AkiraK | 2:5e02179f4141 | 168 | } |
AkiraK | 2:5e02179f4141 | 169 | |
AkiraK | 2:5e02179f4141 | 170 | } |
AkiraK | 2:5e02179f4141 | 171 | } |
AkiraK | 2:5e02179f4141 | 172 | } |
AkiraK | 2:5e02179f4141 | 173 | } |
AkiraK | 2:5e02179f4141 | 174 | } |