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

Dependencies:   ChaNFSSD FatFileSystem

main.cpp

Committer:
jksoft
Date:
2012-04-03
Revision:
0:9ca772c9b3e9

File content as of revision 0:9ca772c9b3e9:

// GPS Logger mbed LPC11U24

#include "mbed.h"
#include "SDFileSystem.h"

SDFileSystem sd(p5, p6, p7, p8, "fs");

Serial gps(p9, p10);
Serial pc(USBTX, USBRX);

InterruptIn pps(p14);

DigitalOut pps_stat(LED1);
DigitalOut sd_access(LED2);
DigitalOut rx_status(LED3);
DigitalIn enable(p22);

int num = 0;
int pps_count = 0;

// GPS 1pps interrupt
void int_pps() {
    pps_stat =! pps_stat;
    pps_count += 1;
}


int main() {
    
    char tmp;
    char data[80];
    int log_count = 0;
    bool rec_flag = false;
    int before_sw = 1;
    FILE *fp = NULL;
    
    enable.mode(PullUp);

    pps_stat = 0;
    sd_access = 0;
    rx_status = 0;

    pps.rise(&int_pps); 
    gps.baud(115200);
    
    
    sd_access = 1;

    while (1) {
        int sw = enable;
        
        if( (sw == 0) && (before_sw == 1) )
        {
            if( rec_flag )
            {
                rec_flag = false;
                fclose(fp);
                fp = NULL;
            }
            else
            {
                rec_flag = true;
                fp = fopen("/fs/gps.log", "w");
            }
            wait(0.2);
        }
        before_sw = sw;

        if(gps.readable()) {
            tmp = gps.getc();
            data[num] = tmp;
            if( data[num] == '$' ) {
                data[0] = '$';
                num = 1;
            }
            else if( data[num-1] == '\r' && data[num] == '\n' ) {
            
                if(rec_flag)    rx_status = !rx_status;

                data[num+1] = '\0';

                if(memcmp(data, "$GPRMC",6) == 0) {
                                
                    if(pps_count >= 5) {
                        pps_count = 0;
                    
                        if( fp != NULL ) {
                            sd_access =! sd_access;
                            fprintf(fp,"%s",data);
                        }

                    }
                    if(rec_flag)    deepsleep();
                }
                data[0] = '\0';
                num = 0;
            }
            else {
                num++;
                if(num > 80)
                {
                    num = 0;
                }
            }
        }
    }
}