M0版mbedのGPSロガープログラムです。

Dependencies:   ChaNFSSD FatFileSystem

Committer:
jksoft
Date:
Tue Apr 03 08:19:20 2012 +0000
Revision:
0:9ca772c9b3e9

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jksoft 0:9ca772c9b3e9 1 // GPS Logger mbed LPC11U24
jksoft 0:9ca772c9b3e9 2
jksoft 0:9ca772c9b3e9 3 #include "mbed.h"
jksoft 0:9ca772c9b3e9 4 #include "SDFileSystem.h"
jksoft 0:9ca772c9b3e9 5
jksoft 0:9ca772c9b3e9 6 SDFileSystem sd(p5, p6, p7, p8, "fs");
jksoft 0:9ca772c9b3e9 7
jksoft 0:9ca772c9b3e9 8 Serial gps(p9, p10);
jksoft 0:9ca772c9b3e9 9 Serial pc(USBTX, USBRX);
jksoft 0:9ca772c9b3e9 10
jksoft 0:9ca772c9b3e9 11 InterruptIn pps(p14);
jksoft 0:9ca772c9b3e9 12
jksoft 0:9ca772c9b3e9 13 DigitalOut pps_stat(LED1);
jksoft 0:9ca772c9b3e9 14 DigitalOut sd_access(LED2);
jksoft 0:9ca772c9b3e9 15 DigitalOut rx_status(LED3);
jksoft 0:9ca772c9b3e9 16 DigitalIn enable(p22);
jksoft 0:9ca772c9b3e9 17
jksoft 0:9ca772c9b3e9 18 int num = 0;
jksoft 0:9ca772c9b3e9 19 int pps_count = 0;
jksoft 0:9ca772c9b3e9 20
jksoft 0:9ca772c9b3e9 21 // GPS 1pps interrupt
jksoft 0:9ca772c9b3e9 22 void int_pps() {
jksoft 0:9ca772c9b3e9 23 pps_stat =! pps_stat;
jksoft 0:9ca772c9b3e9 24 pps_count += 1;
jksoft 0:9ca772c9b3e9 25 }
jksoft 0:9ca772c9b3e9 26
jksoft 0:9ca772c9b3e9 27
jksoft 0:9ca772c9b3e9 28 int main() {
jksoft 0:9ca772c9b3e9 29
jksoft 0:9ca772c9b3e9 30 char tmp;
jksoft 0:9ca772c9b3e9 31 char data[80];
jksoft 0:9ca772c9b3e9 32 int log_count = 0;
jksoft 0:9ca772c9b3e9 33 bool rec_flag = false;
jksoft 0:9ca772c9b3e9 34 int before_sw = 1;
jksoft 0:9ca772c9b3e9 35 FILE *fp = NULL;
jksoft 0:9ca772c9b3e9 36
jksoft 0:9ca772c9b3e9 37 enable.mode(PullUp);
jksoft 0:9ca772c9b3e9 38
jksoft 0:9ca772c9b3e9 39 pps_stat = 0;
jksoft 0:9ca772c9b3e9 40 sd_access = 0;
jksoft 0:9ca772c9b3e9 41 rx_status = 0;
jksoft 0:9ca772c9b3e9 42
jksoft 0:9ca772c9b3e9 43 pps.rise(&int_pps);
jksoft 0:9ca772c9b3e9 44 gps.baud(115200);
jksoft 0:9ca772c9b3e9 45
jksoft 0:9ca772c9b3e9 46
jksoft 0:9ca772c9b3e9 47 sd_access = 1;
jksoft 0:9ca772c9b3e9 48
jksoft 0:9ca772c9b3e9 49 while (1) {
jksoft 0:9ca772c9b3e9 50 int sw = enable;
jksoft 0:9ca772c9b3e9 51
jksoft 0:9ca772c9b3e9 52 if( (sw == 0) && (before_sw == 1) )
jksoft 0:9ca772c9b3e9 53 {
jksoft 0:9ca772c9b3e9 54 if( rec_flag )
jksoft 0:9ca772c9b3e9 55 {
jksoft 0:9ca772c9b3e9 56 rec_flag = false;
jksoft 0:9ca772c9b3e9 57 fclose(fp);
jksoft 0:9ca772c9b3e9 58 fp = NULL;
jksoft 0:9ca772c9b3e9 59 }
jksoft 0:9ca772c9b3e9 60 else
jksoft 0:9ca772c9b3e9 61 {
jksoft 0:9ca772c9b3e9 62 rec_flag = true;
jksoft 0:9ca772c9b3e9 63 fp = fopen("/fs/gps.log", "w");
jksoft 0:9ca772c9b3e9 64 }
jksoft 0:9ca772c9b3e9 65 wait(0.2);
jksoft 0:9ca772c9b3e9 66 }
jksoft 0:9ca772c9b3e9 67 before_sw = sw;
jksoft 0:9ca772c9b3e9 68
jksoft 0:9ca772c9b3e9 69 if(gps.readable()) {
jksoft 0:9ca772c9b3e9 70 tmp = gps.getc();
jksoft 0:9ca772c9b3e9 71 data[num] = tmp;
jksoft 0:9ca772c9b3e9 72 if( data[num] == '$' ) {
jksoft 0:9ca772c9b3e9 73 data[0] = '$';
jksoft 0:9ca772c9b3e9 74 num = 1;
jksoft 0:9ca772c9b3e9 75 }
jksoft 0:9ca772c9b3e9 76 else if( data[num-1] == '\r' && data[num] == '\n' ) {
jksoft 0:9ca772c9b3e9 77
jksoft 0:9ca772c9b3e9 78 if(rec_flag) rx_status = !rx_status;
jksoft 0:9ca772c9b3e9 79
jksoft 0:9ca772c9b3e9 80 data[num+1] = '\0';
jksoft 0:9ca772c9b3e9 81
jksoft 0:9ca772c9b3e9 82 if(memcmp(data, "$GPRMC",6) == 0) {
jksoft 0:9ca772c9b3e9 83
jksoft 0:9ca772c9b3e9 84 if(pps_count >= 5) {
jksoft 0:9ca772c9b3e9 85 pps_count = 0;
jksoft 0:9ca772c9b3e9 86
jksoft 0:9ca772c9b3e9 87 if( fp != NULL ) {
jksoft 0:9ca772c9b3e9 88 sd_access =! sd_access;
jksoft 0:9ca772c9b3e9 89 fprintf(fp,"%s",data);
jksoft 0:9ca772c9b3e9 90 }
jksoft 0:9ca772c9b3e9 91
jksoft 0:9ca772c9b3e9 92 }
jksoft 0:9ca772c9b3e9 93 if(rec_flag) deepsleep();
jksoft 0:9ca772c9b3e9 94 }
jksoft 0:9ca772c9b3e9 95 data[0] = '\0';
jksoft 0:9ca772c9b3e9 96 num = 0;
jksoft 0:9ca772c9b3e9 97 }
jksoft 0:9ca772c9b3e9 98 else {
jksoft 0:9ca772c9b3e9 99 num++;
jksoft 0:9ca772c9b3e9 100 if(num > 80)
jksoft 0:9ca772c9b3e9 101 {
jksoft 0:9ca772c9b3e9 102 num = 0;
jksoft 0:9ca772c9b3e9 103 }
jksoft 0:9ca772c9b3e9 104 }
jksoft 0:9ca772c9b3e9 105 }
jksoft 0:9ca772c9b3e9 106 }
jksoft 0:9ca772c9b3e9 107 }