2017年伊豆大島共同打ち上げ実験用電装モジュール搭載GPS測位プログラム
Dependents: Hybrid_interruptGPS Hybrid_main_FirstEdtion rocket_logger_sinkan2018_v1 HYBRYD2018_IZU_ROCKET ... more
Diff: GPS_interrupt.h
- Revision:
- 2:7be89bab6db9
- Parent:
- 1:57eeee14dd31
- Child:
- 3:8e66ec281888
diff -r 57eeee14dd31 -r 7be89bab6db9 GPS_interrupt.h --- 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