mbed用GPSモジュール利用プログラム for IZU 割り込みを利用し、自動的に内部変数へ座標などのデータが更新されるようになっている。そのため、好きなタイミングで専用関数により値を取得できる。

Dependencies:   GPS_interrupt mbed

Hybrid_interruptGPS.cpp

Committer:
Gaku0606
Date:
2017-01-02
Revision:
2:c05887794ff5
Parent:
1:1d1b6b0396d1
Child:
3:220b43770a14

File content as of revision 2:c05887794ff5:

#include "mbed.h"
#include "GPS_interrupt.h"
Serial pc(USBTX, USBRX);
RawSerial mygps(p9, p10);

#define FIRST_BAUDRATE 115200
#define BAUDRATE 115200

GPS_interrupt gps(&mygps, BAUDRATE, 10, FIRST_BAUDRATE);

void bootFunction(){
    pc.printf("\r\n");
    pc.printf("start LPC1768 boot phase\r\n");
    wait(0.5);
    for(int i = 0;i < 100;i++){
        pc.printf("Loading... : %3d [%%]\r", i);
        wait(0.025);
    }
    pc.printf("Loading... : %3d [%%]\r\n", 100);
    pc.printf("\t-> finished!!\r\n");
    pc.printf("System : %d Hz\r\n", SystemCoreClock );
    wait(0.5);
    pc.printf("start main program\r\n");
    wait(0.1);
    pc.printf("initialize");
    wait(0.75);
    pc.printf(" -> OK\r\n");
    wait(0.1);
    pc.printf("GPS Connecting");
    wait(0.5);
    pc.printf(".");
    wait(0.5);
    pc.printf(".");
    wait(0.5);
    pc.printf(".");
    wait(0.5);
    pc.printf(".");
    wait(0.5);
    pc.printf(".");
    wait(0.5);
    pc.printf(".");
    wait(0.5);
    while(1){
        if(gps.gps_readable)    break;   
    }
    pc.printf(" -> OK\r\n");
    pc.printf("start!!\r\n\r\n");
    wait(0.5);
}

int main() {
    
    pc.baud(115200);
    //mygps.baud(FIRST_BAUDRATE);
    
    bootFunction();
    
    while(1){
        double xy[2] = {0};
        float utc[6] = {0};
        gps.getPosition(xy);
        gps.getUTC(utc);
        pc.printf("\033[K");
        pc.printf("%d/%d/%d %d:%d:%02.2f ",(int)utc[0],(int)utc[1], (int)utc[2], (int)utc[3], (int)utc[4] ,utc[5]); 
        pc.printf("(%3.7fe,%3.7fn) ",xy[0], xy[1]);
        pc.printf("%d satellites, %.2f[m], %.3f[m/s], %3.2f[degree]\r", gps.Number(), gps.Height(), gps.Knot()*1852/3600, gps.Degree());   
        wait(0.1);
    }
}