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

Dependents:   Hybrid_interruptGPS Hybrid_main_FirstEdtion rocket_logger_sinkan2018_v1 HYBRYD2018_IZU_ROCKET ... more

Revision:
2:7be89bab6db9
Parent:
1:57eeee14dd31
Child:
3:8e66ec281888
--- a/GPS_interrupt.h	Mon Jan 02 01:05:31 2017 +0000
+++ b/GPS_interrupt.h	Mon Jan 02 18:48:44 2017 +0000
@@ -1,27 +1,42 @@
 /*=============================================================================
-*   GPS_interrupt.lib ver 1.0.5
+*   GPS_interrupt.lib ver 1.2.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.
-*
+*   なんかコマンドの送信ミスがあるみたいで、確認して次に進めるようにすべきかも
+*   PCソフトで設定して、バックアップ電池付けるのが正確っぽい
 *=============================================================================*/
 #ifndef GPS_INTERRUPT_H_
 #define GPS_INTERRUPT_H_
 
-#include "mbed.h"
-
+#include "mbed.h"//要る?
 
 class GPS_interrupt{
   
     public:
-        GPS_interrupt(RawSerial *_gps, int baudrate = 9600);
+        /**=====================================================================
+        *   @brief  GPS_interrupt's constructer
+        *   @param  *_gps   :   your Rawserial bus address
+        *   @param  _baudrate   :   baudrate you want to communication with GPS module
+        *   @param  _frequency  :   set updata rate
+        *   @param  start_baudrate  :   baudrate in starting link
+        *=======================================================================*/
+        GPS_interrupt(RawSerial *_gps, int _baudrate = 115200, int _frequency = 10, int start_baudrate = 9600);
         static GPS_interrupt* gps_irq;
         void initialize();//初期化関数
         void gps_auto_receive();
-        bool processGPS(char *line);
+        bool processGPRMC(char *line);
+        bool processGPGGA(char *line);
+        void debug(char *str);
+        unsigned char checkSum(char *str);
+        void rmc_initialize();
+        void gga_initialize();
         
-    private:
+    private://別にpublicにしても良かったけれど、unexpectedlyに変更されるので使えないようにしてやった
+        int baudrate;
+        int frequency;
+    
         static double latitude;
         static double longitude;
         static int year;
@@ -38,8 +53,9 @@
         
         static char gps_buffer_A[128];
         static char gps_buffer_B[128];
+        
+    public:
         static char *gps_read_buffer;
-    public:
         static bool gps_readable;
     private:
         RawSerial *gps;
@@ -100,6 +116,22 @@
             _utc[4] = minutes;
             _utc[5] = (int)seconds;
         }
+        inline void getSpeedVector(double *_knot, double *_degree){
+            *_knot = knot;
+            *_degree = degree;   
+        }
+        inline int Number(){
+            return number;   
+        }
+        inline double Height(){
+            return height;   
+        }
+        inline double Knot(){
+            return knot;   
+        }
+        inline double Degree(){
+            return degree;   
+        }
 };
 /////////////////
 /////sample//////
@@ -110,25 +142,67 @@
 Serial pc(USBTX, USBRX);
 RawSerial mygps(p9, p10);
 
-GPS_interrupt gps(&mygps, 9600);
+GPS_interrupt gps(&mygps, 115200, 10, 115200);
+
+void bootFunction(){//do not need
+    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(9600);
+    //mygps.baud(9600);
     
-    pc.printf("%d Hz\r\n", SystemCoreClock );
+    bootFunction();
     
-    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);
+        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);
     }
 }
+
 */
 #endif
\ No newline at end of file