ARLISS2012

Dependencies:   mbed-rtos mbed MMA7361L MPL115A2

Fork of rtos_basic by mbed official

Committer:
AkiraK
Date:
Thu Apr 30 13:56:09 2015 +0000
Revision:
12:a40b5f2461fb
Parent:
6:c97217c9191b
ARLISS2012

Who changed what in which revision?

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