M0版mbedのGPSロガープログラムです。
Dependencies: ChaNFSSD FatFileSystem
main.cpp@0:9ca772c9b3e9, 2012-04-03 (annotated)
- Committer:
- jksoft
- Date:
- Tue Apr 03 08:19:20 2012 +0000
- Revision:
- 0:9ca772c9b3e9
Who changed what in which revision?
User | Revision | Line number | New 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 | } |