2017年伊豆大島共同打ち上げ実験用電装モジュール搭載GPS測位プログラム

Dependents:   Hybrid_interruptGPS Hybrid_main_FirstEdtion rocket_logger_sinkan2018_v1 HYBRYD2018_IZU_ROCKET ... more

GPS_interrupt.h

Committer:
Gaku0606
Date:
2017-01-02
Revision:
1:57eeee14dd31
Parent:
0:74d8e952a3bd
Child:
2:7be89bab6db9

File content as of revision 1:57eeee14dd31:

/*=============================================================================
*   GPS_interrupt.lib ver 1.0.5
*   
*   Each palameters are not stable because they can be changed unexpectedly.
*   Therefor, you should use the funtions which have return value.
*   Then, you must not substitute any value for those palameters.
*
*=============================================================================*/
#ifndef GPS_INTERRUPT_H_
#define GPS_INTERRUPT_H_

#include "mbed.h"


class GPS_interrupt{
  
    public:
        GPS_interrupt(RawSerial *_gps, int baudrate = 9600);
        static GPS_interrupt* gps_irq;
        void initialize();//初期化関数
        void gps_auto_receive();
        bool processGPS(char *line);
        
    private:
        static double latitude;
        static double longitude;
        static int year;
        static int month;
        static int day;
        static int hour;
        static int minutes;
        static double seconds;
        static double knot;
        static double degree;
        static double height;
        static double geoid;
        static int number;
        
        static char gps_buffer_A[128];
        static char gps_buffer_B[128];
        static char *gps_read_buffer;
    public:
        static bool gps_readable;
    private:
        RawSerial *gps;
    public:
        inline double Longitude(){
            return longitude;
        }
        inline double Latitude(){
            return latitude;
        }
        inline int Year(){
            return year;
        }
        inline int Month(){
            return month;
        }
        inline int Day(){
            return day;
        }
        inline int Hour(){
            return hour;   
        }
        inline int Minutes(){
            return minutes;
        }
        inline double Seconds(){
            return seconds;   
        }
        inline void getPosition(double *lon, double *lat){
            *lon = longitude;
            *lat = latitude;   
        }
        inline void getPosition(double *lonlat){
            lonlat[0] = longitude;
            lonlat[1] = latitude;   
        }
        inline void getUTC(int *_year, int *_month, int *_day, int *_hour, int *_minutes, double *_seconds){
            *_year = year;
            *_month = month;
            *_day = day;
            *_hour = hour;
            *_minutes = minutes;
            *_seconds = seconds;    
        }
        inline void getUTC(float *_utc){
            _utc[0] = (float)year;
            _utc[1] = (float)month;
            _utc[2] = (float)day;
            _utc[3] = (float)hour;
            _utc[4] = (float)minutes;
            _utc[5] = seconds;
        }
        inline void getUTC(int *_utc){
            _utc[0] = year;
            _utc[1] = month;
            _utc[2] = day;
            _utc[3] = hour;
            _utc[4] = minutes;
            _utc[5] = (int)seconds;
        }
};
/////////////////
/////sample//////
/////////////////
/*
#include "mbed.h"
#include "GPS_interrupt.h"
Serial pc(USBTX, USBRX);
RawSerial mygps(p9, p10);

GPS_interrupt gps(&mygps, 9600);

int main() {
    
    pc.baud(115200);
    mygps.baud(9600);
    
    pc.printf("%d Hz\r\n", SystemCoreClock );
    
    wait(3.0);
    while(1){
            double xy[2] = {0};
            float utc[6] = {0};
            gps.getPosition(xy);
            gps.getUTC(utc);
            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("lon %f\tlat %f\r\n",xy[0], xy[1]);
            wait(0.10);
    }
}
*/
#endif