ARLISS2012

Dependencies:   mbed-rtos mbed MMA7361L MPL115A2

Fork of rtos_basic by mbed official

Committer:
AkiraK
Date:
Thu Aug 30 09:37:06 2012 +0000
Revision:
5:31bafc5b1bcd
Parent:
4:4faccc542b32
Child:
6:c97217c9191b
2012_8_30_2;

Who changed what in which revision?

UserRevisionLine numberNew 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 3:b740280416f6 20 float begin_1;
AkiraK 2:5e02179f4141 21
AkiraK 2:5e02179f4141 22 FILE *fp = fopen("/local/cansat.txt", "a"); //file system start, file open <about file system to open "cansat.txt"
AkiraK 2:5e02179f4141 23
AkiraK 2:5e02179f4141 24 char gps1[1000];
AkiraK 2:5e02179f4141 25 char GPS[1000];
AkiraK 2:5e02179f4141 26 int timer_count = 0;
AkiraK 2:5e02179f4141 27 int xbee_count = 0;
AkiraK 2:5e02179f4141 28 bool xbee_flag = false;
AkiraK 2:5e02179f4141 29 bool gps_flag = true; //about gps_flag define(true) <gps_define(true)
AkiraK 2:5e02179f4141 30 bool gps_get = true; //which gps get or lost
AkiraK 2:5e02179f4141 31 bool stateSW = false; //about switch flag define(false) <stateSW(false)
AkiraK 3:b740280416f6 32 int at = 20; // define avarage time
AkiraK 2:5e02179f4141 33
AkiraK 2:5e02179f4141 34 void gps_thread(void const *argument) // <gps thread start
AkiraK 2:5e02179f4141 35 {
AkiraK 2:5e02179f4141 36 while (gps_flag) { //if gps_flag is true, while can run <gps data scan start
AkiraK 2:5e02179f4141 37 gps.scanf("%s", gps1);
AkiraK 2:5e02179f4141 38 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 39 gps.scanf("%s\r\n", GPS);
AkiraK 2:5e02179f4141 40 gps_get = true;
AkiraK 2:5e02179f4141 41 }
AkiraK 2:5e02179f4141 42 }
AkiraK 2:5e02179f4141 43 }
AkiraK 2:5e02179f4141 44
AkiraK 2:5e02179f4141 45 int main()
AkiraK 2:5e02179f4141 46 {
AkiraK 2:5e02179f4141 47
AkiraK 2:5e02179f4141 48 float press_buff = 0; //press buffer is 0 <buff define start
AkiraK 2:5e02179f4141 49 float temp_buff = 0; //temparature buffer is 0
AkiraK 2:5e02179f4141 50 float humi_buff = 0; //humidity buffer is 0
AkiraK 2:5e02179f4141 51 float accelx_buff = 0; //accelx buffer is 0
AkiraK 2:5e02179f4141 52 float accely_buff = 0; //accely buffer is 0
AkiraK 2:5e02179f4141 53 float accelz_buff = 0; //accelz buffer is 0 <buff define end
AkiraK 2:5e02179f4141 54
AkiraK 2:5e02179f4141 55 accel.setScale(MMA7361L::SCALE_6G); //6g mode
AkiraK 2:5e02179f4141 56 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 57
AkiraK 2:5e02179f4141 58 MPL115A2 mpl115a2(p9, p10); //define pressure pin number <pressure pin number define
AkiraK 2:5e02179f4141 59
AkiraK 2:5e02179f4141 60 //____define of main program(end)
AkiraK 2:5e02179f4141 61
AkiraK 2:5e02179f4141 62 //____run main program(start)
AkiraK 2:5e02179f4141 63
AkiraK 2:5e02179f4141 64 while (true) {
AkiraK 2:5e02179f4141 65
AkiraK 2:5e02179f4141 66 leds = 1; // <led start(if mbed get A)
AkiraK 2:5e02179f4141 67 wait(1.0);
AkiraK 2:5e02179f4141 68 leds = 0;
AkiraK 2:5e02179f4141 69 wait(1.0);
AkiraK 2:5e02179f4141 70
AkiraK 2:5e02179f4141 71 if (startsw != stateSW) { //if start switch is pushed bu anyone run <get data start(if push start switch)
AkiraK 2:5e02179f4141 72 stateSW = !stateSW;
AkiraK 2:5e02179f4141 73 if (stateSW) {
AkiraK 2:5e02179f4141 74
AkiraK 2:5e02179f4141 75 timer.start(); //timer start <timer caunt system start
AkiraK 2:5e02179f4141 76 begin = timer.read_us(); //timer number read
AkiraK 2:5e02179f4141 77
AkiraK 2:5e02179f4141 78 Thread thread(gps_thread); //gps thread run
AkiraK 2:5e02179f4141 79
AkiraK 2:5e02179f4141 80 while (true) {
AkiraK 2:5e02179f4141 81
AkiraK 2:5e02179f4141 82 leds = 1;
AkiraK 2:5e02179f4141 83 press_buff = 0; //pressure buffer reset <buffer reset(start)
AkiraK 2:5e02179f4141 84 temp_buff = 0; //temparture buffer reset
AkiraK 2:5e02179f4141 85 humi_buff = 0; //humidity buffer reset
AkiraK 2:5e02179f4141 86 accelx_buff = 0; //accelx buffer reset
AkiraK 2:5e02179f4141 87 accely_buff = 0; //accely buffer reset
AkiraK 3:b740280416f6 88 accelz_buff = 0; //accelz buffer reset // <buffer reset(end)
AkiraK 2:5e02179f4141 89 leds = 0;
AkiraK 2:5e02179f4141 90 leds = 2;
AkiraK 2:5e02179f4141 91
AkiraK 2:5e02179f4141 92 for (int i = 0; i < at; i++) { //get data and + 20 times (loop) <get data loop(start)
AkiraK 2:5e02179f4141 93 temp_buff += (3.3 * lm60 - 0.424) / 0.00625; //temperture data calculation
AkiraK 2:5e02179f4141 94 press_buff += mpl115a2.readPressure(); //pressure get data(this calculation is run by library)
AkiraK 2:5e02179f4141 95 humi_buff += hu * 3.3 * 100; //humidity data culculation
AkiraK 2:5e02179f4141 96 accelx_buff += accel.getAccelX(); //accelx get
AkiraK 2:5e02179f4141 97 accely_buff += accel.getAccelY(); //accely get
AkiraK 3:b740280416f6 98 accelz_buff += accel.getAccelZ(); //accelz get
AkiraK 2:5e02179f4141 99 wait(0.005);
AkiraK 2:5e02179f4141 100 }
AkiraK 2:5e02179f4141 101
AkiraK 2:5e02179f4141 102 leds = 0;
AkiraK 2:5e02179f4141 103
AkiraK 2:5e02179f4141 104 float tempv = temp_buff / at; // <avarage data(start)
AkiraK 2:5e02179f4141 105 float press = press_buff / at;
AkiraK 2:5e02179f4141 106 float humi = humi_buff / at;
AkiraK 2:5e02179f4141 107 float accelX = accelx_buff / at;
AkiraK 2:5e02179f4141 108 float accelY = accely_buff / at;
AkiraK 2:5e02179f4141 109 float accelZ = accelz_buff / at; // <avarage data(end)
AkiraK 2:5e02179f4141 110 float lx = illu * 3.3 / 3 * 1000;
AkiraK 2:5e02179f4141 111
AkiraK 5:31bafc5b1bcd 112 end = timer.read_us() - timer_count*2000;
AkiraK 5:31bafc5b1bcd 113 double timers = (end - begin ) / 1000000;
AkiraK 4:4faccc542b32 114
AkiraK 5:31bafc5b1bcd 115 if(timers > 2000) {
AkiraK 4:4faccc542b32 116 timer_count ++;
AkiraK 5:31bafc5b1bcd 117 begin = timer.read_us() - timer_count*2000;; //timer number read
AkiraK 5:31bafc5b1bcd 118 timers = (end - begin) / 1000000;
AkiraK 4:4faccc542b32 119 }
AkiraK 4:4faccc542b32 120
AkiraK 2:5e02179f4141 121
AkiraK 3:b740280416f6 122 if(xbee_count > 6) {
AkiraK 3:b740280416f6 123 double stop_timer = (end - begin_1) / 1000000;
AkiraK 5:31bafc5b1bcd 124 if(stop_timer > 30) {
AkiraK 3:b740280416f6 125 fclose(fp);
AkiraK 3:b740280416f6 126 timer.stop();
AkiraK 3:b740280416f6 127 gps_flag = 0;
AkiraK 3:b740280416f6 128 while(true) {
AkiraK 3:b740280416f6 129 leds = 8;
AkiraK 3:b740280416f6 130 wait(1.0);
AkiraK 3:b740280416f6 131 leds = 0;
AkiraK 3:b740280416f6 132 wait(1.0);
AkiraK 3:b740280416f6 133 }
AkiraK 3:b740280416f6 134 }
AkiraK 3:b740280416f6 135 }
AkiraK 3:b740280416f6 136
AkiraK 2:5e02179f4141 137 if(lx > 800) {
AkiraK 2:5e02179f4141 138 xbee_count ++;
AkiraK 2:5e02179f4141 139
AkiraK 2:5e02179f4141 140 if(xbee_count > 5) {
AkiraK 2:5e02179f4141 141 xbee_flag = true;
AkiraK 5:31bafc5b1bcd 142 if(xbee_count == 6) {
AkiraK 3:b740280416f6 143 begin_1 = timer.read_us();
AkiraK 3:b740280416f6 144 break;
AkiraK 3:b740280416f6 145 }
AkiraK 2:5e02179f4141 146 }
AkiraK 2:5e02179f4141 147 }
AkiraK 2:5e02179f4141 148
AkiraK 2:5e02179f4141 149 leds = 4;
AkiraK 2:5e02179f4141 150
AkiraK 2:5e02179f4141 151 if (gps_get == false) {
AkiraK 2:5e02179f4141 152 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 153 if(xbee_flag == true) {
AkiraK 2:5e02179f4141 154 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 155 }
AkiraK 2:5e02179f4141 156 }
AkiraK 2:5e02179f4141 157
AkiraK 2:5e02179f4141 158 if (gps_get == true) {
AkiraK 2:5e02179f4141 159 leds = 15;
AkiraK 2:5e02179f4141 160 if(xbee_flag == true) {
AkiraK 2:5e02179f4141 161 xbee.printf("%s,#end\r\n", GPS); //GPS data is dent by xbee <xbee send system(GPS)
AkiraK 2:5e02179f4141 162 }
AkiraK 2:5e02179f4141 163 fprintf(fp, "%s,#end\r\n", GPS); //GPS data is writen to mbed <write system(GPS)
AkiraK 2:5e02179f4141 164 gps_get = false;
AkiraK 2:5e02179f4141 165 leds = 0;
AkiraK 2:5e02179f4141 166 }
AkiraK 2:5e02179f4141 167
AkiraK 2:5e02179f4141 168 leds = 0;
AkiraK 2:5e02179f4141 169 leds = 8;
AkiraK 2:5e02179f4141 170
AkiraK 2:5e02179f4141 171 wait(0.1);
AkiraK 2:5e02179f4141 172
AkiraK 2:5e02179f4141 173 if (endsw != stateSW) {
AkiraK 2:5e02179f4141 174 stateSW = !stateSW;
AkiraK 2:5e02179f4141 175
AkiraK 2:5e02179f4141 176 if (stateSW) {
AkiraK 2:5e02179f4141 177 fclose(fp);
AkiraK 2:5e02179f4141 178 timer.stop();
AkiraK 2:5e02179f4141 179 gps_flag = 0;
AkiraK 2:5e02179f4141 180
AkiraK 2:5e02179f4141 181 while (true) {
AkiraK 2:5e02179f4141 182 leds = 8;
AkiraK 2:5e02179f4141 183 wait(1.0);
AkiraK 2:5e02179f4141 184 leds = 0;
AkiraK 2:5e02179f4141 185 wait(1.0);
AkiraK 2:5e02179f4141 186 }
AkiraK 2:5e02179f4141 187
AkiraK 2:5e02179f4141 188 }
AkiraK 2:5e02179f4141 189
AkiraK 2:5e02179f4141 190 }
AkiraK 2:5e02179f4141 191
AkiraK 2:5e02179f4141 192 }
AkiraK 2:5e02179f4141 193 }
AkiraK 2:5e02179f4141 194 }
AkiraK 2:5e02179f4141 195 }
AkiraK 2:5e02179f4141 196 }