ARLISS2012
Dependencies: mbed-rtos mbed MMA7361L MPL115A2
Fork of rtos_basic by
Diff: main.cpp
- Revision:
- 2:5e02179f4141
- Parent:
- 1:491820ee784d
- Child:
- 3:b740280416f6
diff -r 491820ee784d -r 5e02179f4141 main.cpp --- a/main.cpp Thu Jul 12 10:23:40 2012 +0000 +++ b/main.cpp Wed Aug 22 03:02:00 2012 +0000 @@ -1,21 +1,174 @@ -#include "mbed.h" -#include "rtos.h" - -DigitalOut led1(LED1); -DigitalOut led2(LED2); - -void led2_thread(void const *argument) { - while (true) { - led2 = !led2; - Thread::wait(1000); - } -} - -int main() { - Thread thread(led2_thread); - - while (true) { - led1 = !led1; - Thread::wait(500); - } -} +#include "mbed.h" //use mbed basic library <include start +#include "MPL115A2.h" // use MPL115A2 library +#include "MMA7361L.h" //use MMA7361L library use +#include "rtos.h" //use rtos library <include end + +LocalFileSystem local("local"); //use Local file system <file system define + +Timer timer; //use timer <which pin does system use?(start) +MMA7361L accel(p17, p18, p19, p23, p24, p22); //decide pin number of accel +AnalogIn lm60(p20); // decide pin number of tempareture +DigitalIn endsw(p5); // decide pin number of end switch +DigitalIn startsw(p6); //decide pin number of start switch +BusOut leds(LED1, LED2, LED3, LED4); // decide led number of system check +AnalogIn hu(p16); // decide pin number of humidity +AnalogIn illu(p15); +Serial xbee(p28,p27); //decide pin number of xbee and decide Serial using +Serial gps(p13, p14); // decide pin number of gps <which pin does system use?(end) + +float begin, end;// timer define + +FILE *fp = fopen("/local/cansat.txt", "a"); //file system start, file open <about file system to open "cansat.txt" + +char gps1[1000]; +char GPS[1000]; +int timer_count = 0; +int xbee_count = 0; +bool xbee_flag = false; +bool gps_flag = true; //about gps_flag define(true) <gps_define(true) +bool gps_get = true; //which gps get or lost +bool stateSW = false; //about switch flag define(false) <stateSW(false) +int at = 20; // define avarage time <define avarage time + +void gps_thread(void const *argument) // <gps thread start +{ + while (gps_flag) { //if gps_flag is true, while can run <gps data scan start + gps.scanf("%s", gps1); + 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 + gps.scanf("%s\r\n", GPS); + gps_get = true; + } + } +} + +int main() +{ + + float press_buff = 0; //press buffer is 0 <buff define start + float temp_buff = 0; //temparature buffer is 0 + float humi_buff = 0; //humidity buffer is 0 + float accelx_buff = 0; //accelx buffer is 0 + float accely_buff = 0; //accely buffer is 0 + float accelz_buff = 0; //accelz buffer is 0 <buff define end + + accel.setScale(MMA7361L::SCALE_6G); //6g mode + accel.calibrate(MMA7361L::SCALE_6G, -0.96, 1.06, -0.78, 1.28, -1.14, 0.78); //calibration of accelation <calibration of accelation + + MPL115A2 mpl115a2(p9, p10); //define pressure pin number <pressure pin number define + +//____define of main program(end) + +//____run main program(start) + + while (true) { + + leds = 1; // <led start(if mbed get A) + wait(1.0); + leds = 0; + wait(1.0); + + if (startsw != stateSW) { //if start switch is pushed bu anyone run <get data start(if push start switch) + stateSW = !stateSW; + if (stateSW) { + + timer.start(); //timer start <timer caunt system start + begin = timer.read_us(); //timer number read + + Thread thread(gps_thread); //gps thread run + + while (true) { + + leds = 1; + press_buff = 0; //pressure buffer reset <buffer reset(start) + temp_buff = 0; //temparture buffer reset + humi_buff = 0; //humidity buffer reset + accelx_buff = 0; //accelx buffer reset + accely_buff = 0; //accely buffer reset + accelz_buff = 0; //accelz buffer reset <buffer reset(end) + leds = 0; + leds = 2; + + for (int i = 0; i < at; i++) { //get data and + 20 times (loop) <get data loop(start) + temp_buff += (3.3 * lm60 - 0.424) / 0.00625; //temperture data calculation + press_buff += mpl115a2.readPressure(); //pressure get data(this calculation is run by library) + humi_buff += hu * 3.3 * 100; //humidity data culculation + accelx_buff += accel.getAccelX(); //accelx get + accely_buff += accel.getAccelY(); //accely get + accelz_buff += accel.getAccelZ(); //accelz get <get data loop(end) + wait(0.005); + } + + leds = 0; + + float tempv = temp_buff / at; // <avarage data(start) + float press = press_buff / at; + float humi = humi_buff / at; + float accelX = accelx_buff / at; + float accelY = accely_buff / at; + float accelZ = accelz_buff / at; // <avarage data(end) + float lx = illu * 3.3 / 3 * 1000; + + end = timer.read_us(); + double timers = (end - begin) / 1000000; + + if(timers > 2000) { + timer_count ++; + begin = timer.read_us(); //timer number read + } + + if(lx > 800) { + xbee_count ++; + + if(xbee_count > 5) { + xbee_flag = true; + } + } + + leds = 4; + + if (gps_get == false) { + 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); + if(xbee_flag == true) { + 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); + } + } + + if (gps_get == true) { + leds = 15; + if(xbee_flag == true) { + xbee.printf("%s,#end\r\n", GPS); //GPS data is dent by xbee <xbee send system(GPS) + } + fprintf(fp, "%s,#end\r\n", GPS); //GPS data is writen to mbed <write system(GPS) + gps_get = false; + leds = 0; + } + + leds = 0; + leds = 8; + + wait(0.1); + + if (endsw != stateSW) { + stateSW = !stateSW; + + if (stateSW) { + fclose(fp); + timer.stop(); + gps_flag = 0; + + while (true) { + leds = 8; + wait(1.0); + leds = 0; + wait(1.0); + } + + } + + } + + } + } + } + } +} \ No newline at end of file