ARLISS2012

Dependencies:   mbed-rtos mbed MMA7361L MPL115A2

Fork of rtos_basic by mbed official

Files at this revision

API Documentation at this revision

Comitter:
AkiraK
Date:
Wed Aug 22 03:02:00 2012 +0000
Parent:
1:491820ee784d
Child:
3:b740280416f6
Commit message:
20120822 12:01 add lx & timer;

Changed in this revision

MMA7361L.lib Show annotated file Show diff for this revision Revisions of this file
MPL115A2.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MMA7361L.lib	Wed Aug 22 03:02:00 2012 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/yamaguch/code/MMA7361L/#9c2d70a61ce1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MPL115A2.lib	Wed Aug 22 03:02:00 2012 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/yamaguch/code/MPL115A2/#21a2dc316bf3
--- 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