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

Dependents:   Hybrid_interruptGPS Hybrid_main_FirstEdtion rocket_logger_sinkan2018_v1 HYBRYD2018_IZU_ROCKET ... more

Committer:
Sigma884
Date:
Wed Nov 14 09:16:15 2018 +0000
Revision:
17:4b09630703c0
Parent:
16:ded6e8e2850f
????????????????????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Gaku0606 0:74d8e952a3bd 1 /*=============================================================================
Sigma884 15:6b1ed321c1be 2 * GPS_interrupt.lib ver 1.6
Gaku0606 0:74d8e952a3bd 3 *
Gaku0606 1:57eeee14dd31 4 * Each palameters are not stable because they can be changed unexpectedly.
Gaku0606 1:57eeee14dd31 5 * Therefor, you should use the funtions which have return value.
Gaku0606 1:57eeee14dd31 6 * Then, you must not substitute any value for those palameters.
Gaku0606 2:7be89bab6db9 7 * なんかコマンドの送信ミスがあるみたいで、確認して次に進めるようにすべきかも
Gaku0606 2:7be89bab6db9 8 * PCソフトで設定して、バックアップ電池付けるのが正確っぽい
Gaku0606 0:74d8e952a3bd 9 *=============================================================================*/
Gaku0606 4:758f97bee95a 10 /**
Gaku0606 4:758f97bee95a 11 * @file GPS_interrupt.h
Gaku0606 13:3ee69851e270 12 * @brief GPSから送られてくるデータをバックグラウンドで解析し、呼び出せるライブラリ
Sigma884 15:6b1ed321c1be 13 * @author 松本岳 and 林拓真
Sigma884 15:6b1ed321c1be 14 * @note ver1.6
Gaku0606 4:758f97bee95a 15 */
Gaku0606 4:758f97bee95a 16
Gaku0606 0:74d8e952a3bd 17 #ifndef GPS_INTERRUPT_H_
Gaku0606 0:74d8e952a3bd 18 #define GPS_INTERRUPT_H_
Gaku0606 0:74d8e952a3bd 19
Gaku0606 2:7be89bab6db9 20 #include "mbed.h"//要る?
Gaku0606 9:dab13bd20f43 21 #define EARTH_EQUATOR_RADIUS 6378136.6//地球の赤道半径[m]
Gaku0606 9:dab13bd20f43 22 #define EARTH_POLAR_RADIUS 6356751.9//地球の極半径[m]
Gaku0606 9:dab13bd20f43 23 #define EIRTH_AspectRatioInverse 298.257223563//地球の扁平率の逆数、0に近づくにつれ真球になる
Gaku0606 9:dab13bd20f43 24 #define GPS_PI 3.1415926535897932384626433832795
Gaku0606 9:dab13bd20f43 25 #define GPS_2PI 6.283185307179586476925286766559
Gaku0606 9:dab13bd20f43 26 #define KNOT_TO_M_S 0.514444444444444444444444444
Gaku0606 0:74d8e952a3bd 27
Gaku0606 0:74d8e952a3bd 28 class GPS_interrupt{
Gaku0606 8:3f32df2b66c0 29
Gaku0606 0:74d8e952a3bd 30 public:
Sigma884 16:ded6e8e2850f 31 /**
Sigma884 16:ded6e8e2850f 32 * @bref GPS_interrupt's constructer
Sigma884 16:ded6e8e2850f 33 * @param _gps GPSと通信したいSerialバスのポインタ
Sigma884 15:6b1ed321c1be 34 */
Sigma884 15:6b1ed321c1be 35 GPS_interrupt(Serial *_gps);
Sigma884 15:6b1ed321c1be 36
Sigma884 15:6b1ed321c1be 37 /**
Sigma884 16:ded6e8e2850f 38 * @bref GPSのボーレートを変更
Sigma884 16:ded6e8e2850f 39 * @param _baudrate GPSのボーレート(4800, 9600, 14400, 19200, 38400, 57600, 115200)
Sigma884 15:6b1ed321c1be 40 */
Sigma884 15:6b1ed321c1be 41 void changeGPSBaud(int _baudrate);
Sigma884 15:6b1ed321c1be 42
Sigma884 15:6b1ed321c1be 43 /**
Sigma884 16:ded6e8e2850f 44 * @bref GPSのデータレート(1秒に何回データを送信するか)を変更
Sigma884 16:ded6e8e2850f 45 * @param _frequency GPSのデータレート(1~10)
Sigma884 16:ded6e8e2850f 46 * @retval false 失敗
Sigma884 16:ded6e8e2850f 47 * @retval true 成功
Gaku0606 4:758f97bee95a 48 */
Sigma884 15:6b1ed321c1be 49 bool changeGPSFreq(int _frequency);
Sigma884 15:6b1ed321c1be 50
Sigma884 15:6b1ed321c1be 51 /**
Sigma884 16:ded6e8e2850f 52 * @bref GPSのデータ内容を変更
Sigma884 16:ded6e8e2850f 53 * @param _GLL GLLの送信頻度(0 or 1)
Sigma884 16:ded6e8e2850f 54 * @param _RMC RMCの送信頻度(1)
Sigma884 16:ded6e8e2850f 55 * @param _VTG VTGの送信頻度(0 or 1)
Sigma884 16:ded6e8e2850f 56 * @param _GGA GGAの送信頻度(1)
Sigma884 16:ded6e8e2850f 57 * @param _GSA GSAの送信頻度(0 or 1)
Sigma884 16:ded6e8e2850f 58 * @param _GSV GSVの送信頻度(0 or 1)
Sigma884 16:ded6e8e2850f 59 * @retval false 失敗
Sigma884 16:ded6e8e2850f 60 * @retval true 成功
Sigma884 15:6b1ed321c1be 61 */
Sigma884 15:6b1ed321c1be 62 bool changeGPSData(int _GLL, int _RMC, int _VTG, int _GGA, int _GSA, int _GSV);
Gaku0606 5:15ff963f066b 63
Gaku0606 12:935b21d30ec2 64 void debug(bool tf);
Gaku0606 12:935b21d30ec2 65
Gaku0606 12:935b21d30ec2 66 private:
Gaku0606 0:74d8e952a3bd 67 void initialize();//初期化関数
Gaku0606 0:74d8e952a3bd 68 void gps_auto_receive();
Gaku0606 2:7be89bab6db9 69 bool processGPRMC(char *line);
Gaku0606 2:7be89bab6db9 70 bool processGPGGA(char *line);
Sigma884 15:6b1ed321c1be 71 void processPMTK(char *line);
Gaku0606 12:935b21d30ec2 72
Gaku0606 2:7be89bab6db9 73 unsigned char checkSum(char *str);
Gaku0606 2:7be89bab6db9 74 void rmc_initialize();
Gaku0606 2:7be89bab6db9 75 void gga_initialize();
Gaku0606 0:74d8e952a3bd 76
Gaku0606 2:7be89bab6db9 77 private://別にpublicにしても良かったけれど、unexpectedlyに変更されるので使えないようにしてやった
Gaku0606 5:15ff963f066b 78 GPS_interrupt* gps_irq;
Gaku0606 2:7be89bab6db9 79 int baudrate;
Gaku0606 2:7be89bab6db9 80 int frequency;
Gaku0606 8:3f32df2b66c0 81 char gps_buffer_A[128];
Gaku0606 8:3f32df2b66c0 82 char gps_buffer_B[128];
Gaku0606 8:3f32df2b66c0 83 //static char gps_buffer_C[128];
Gaku0606 8:3f32df2b66c0 84 bool debugFlag;
Sigma884 15:6b1ed321c1be 85 int data_sum; //for ChangeGPSData
Sigma884 15:6b1ed321c1be 86 int flag_change_freq; // for ChangeGPSFreq
Sigma884 15:6b1ed321c1be 87 int flag_change_data; // for ChangeGPSData
Sigma884 15:6b1ed321c1be 88 int wait_change;
Gaku0606 8:3f32df2b66c0 89
Gaku0606 8:3f32df2b66c0 90 public:
Gaku0606 4:758f97bee95a 91 double latitude;
Gaku0606 4:758f97bee95a 92 double longitude;
Gaku0606 4:758f97bee95a 93 int year;
Gaku0606 4:758f97bee95a 94 int month;
Gaku0606 4:758f97bee95a 95 int day;
Gaku0606 4:758f97bee95a 96 int hour;
Gaku0606 4:758f97bee95a 97 int minutes;
Gaku0606 12:935b21d30ec2 98 float seconds;
Gaku0606 12:935b21d30ec2 99 float knot;
Gaku0606 12:935b21d30ec2 100 float degree;
Gaku0606 12:935b21d30ec2 101 float height;
Gaku0606 12:935b21d30ec2 102 float geoid;
Gaku0606 4:758f97bee95a 103 int number;
Gaku0606 0:74d8e952a3bd 104
Gaku0606 2:7be89bab6db9 105 public:
Gaku0606 4:758f97bee95a 106 char *gps_read_buffer;
Gaku0606 4:758f97bee95a 107 bool gps_readable;
Gaku0606 0:74d8e952a3bd 108 private:
Gaku0606 6:2f91c71d64b1 109 Serial *gps;
Gaku0606 0:74d8e952a3bd 110 public:
Gaku0606 5:15ff963f066b 111
Gaku0606 5:15ff963f066b 112 /** 経度を返す関数
Gaku0606 13:3ee69851e270 113 * @brief 経度を取得
Gaku0606 4:758f97bee95a 114 * @return double型 経度
Gaku0606 5:15ff963f066b 115 * @note inline展開したつもり
Gaku0606 4:758f97bee95a 116 */
Gaku0606 0:74d8e952a3bd 117 inline double Longitude(){
Gaku0606 0:74d8e952a3bd 118 return longitude;
Gaku0606 0:74d8e952a3bd 119 }
Gaku0606 4:758f97bee95a 120
Gaku0606 5:15ff963f066b 121 /** 緯度を返す関数
Gaku0606 13:3ee69851e270 122 * @brief 緯度を取得
Gaku0606 4:758f97bee95a 123 * @return double型 緯度
Gaku0606 5:15ff963f066b 124 * @note inline展開したつもり
Gaku0606 4:758f97bee95a 125 */
Gaku0606 0:74d8e952a3bd 126 inline double Latitude(){
Gaku0606 0:74d8e952a3bd 127 return latitude;
Gaku0606 0:74d8e952a3bd 128 }
Gaku0606 4:758f97bee95a 129
Gaku0606 5:15ff963f066b 130 /** 年を返す関数
Gaku0606 13:3ee69851e270 131 * @brief 年を取得
Gaku0606 4:758f97bee95a 132 * @return int型 年
Gaku0606 5:15ff963f066b 133 * @note inline展開したつもり
Gaku0606 4:758f97bee95a 134 */
Gaku0606 0:74d8e952a3bd 135 inline int Year(){
Gaku0606 0:74d8e952a3bd 136 return year;
Gaku0606 0:74d8e952a3bd 137 }
Gaku0606 4:758f97bee95a 138
Gaku0606 5:15ff963f066b 139 /** 月を返す関数
Gaku0606 13:3ee69851e270 140 * @brief 月を取得
Gaku0606 4:758f97bee95a 141 * @return int型 月
Gaku0606 5:15ff963f066b 142 * @note inline展開したつもり
Gaku0606 4:758f97bee95a 143 */
Gaku0606 0:74d8e952a3bd 144 inline int Month(){
Gaku0606 0:74d8e952a3bd 145 return month;
Gaku0606 0:74d8e952a3bd 146 }
Gaku0606 4:758f97bee95a 147
Gaku0606 5:15ff963f066b 148 /** 日にちを返す関数
Gaku0606 13:3ee69851e270 149 * @brief 日にちを取得
Gaku0606 4:758f97bee95a 150 * @return int型 日にち
Gaku0606 5:15ff963f066b 151 * @note inline展開したつもり
Gaku0606 4:758f97bee95a 152 */
Gaku0606 0:74d8e952a3bd 153 inline int Day(){
Gaku0606 0:74d8e952a3bd 154 return day;
Gaku0606 0:74d8e952a3bd 155 }
Gaku0606 4:758f97bee95a 156
Gaku0606 5:15ff963f066b 157 /** 時間を返す関数
Gaku0606 13:3ee69851e270 158 * @brief 時間を取得
Gaku0606 4:758f97bee95a 159 * @return int型 時間
Gaku0606 5:15ff963f066b 160 * @note inline展開したつもり
Gaku0606 4:758f97bee95a 161 */
Gaku0606 0:74d8e952a3bd 162 inline int Hour(){
Gaku0606 0:74d8e952a3bd 163 return hour;
Gaku0606 0:74d8e952a3bd 164 }
Gaku0606 4:758f97bee95a 165
Gaku0606 5:15ff963f066b 166 /** 分を返す関数
Gaku0606 13:3ee69851e270 167 * @brief 分を取得
Gaku0606 4:758f97bee95a 168 * @return int型 分
Gaku0606 5:15ff963f066b 169 * @note inline展開したつもり
Gaku0606 4:758f97bee95a 170 */
Gaku0606 0:74d8e952a3bd 171 inline int Minutes(){
Gaku0606 0:74d8e952a3bd 172 return minutes;
Gaku0606 0:74d8e952a3bd 173 }
Gaku0606 4:758f97bee95a 174
Gaku0606 5:15ff963f066b 175 /** 秒を返す関数
Gaku0606 13:3ee69851e270 176 * @brief 秒を取得
Gaku0606 12:935b21d30ec2 177 * @return float型 秒
Gaku0606 4:758f97bee95a 178 */
Gaku0606 12:935b21d30ec2 179 inline float Seconds(){
Gaku0606 0:74d8e952a3bd 180 return seconds;
Gaku0606 0:74d8e952a3bd 181 }
Gaku0606 4:758f97bee95a 182
Gaku0606 5:15ff963f066b 183 /** 経度・緯度を取得できる関数
Gaku0606 13:3ee69851e270 184 * @brief 2つの変数に経度、緯度の順に値を代入する
Gaku0606 5:15ff963f066b 185 * @param lon double型 経度 ポインタ
Gaku0606 5:15ff963f066b 186 * @param lat double型 緯度 ポインタ
Gaku0606 4:758f97bee95a 187 * @return データが有効かどうか 有効ならtrue, 無効ならfalse
Gaku0606 5:15ff963f066b 188 * @note 2つ変数を作って、そのアドレスを引数に与えてください。
Gaku0606 4:758f97bee95a 189 */
Gaku0606 4:758f97bee95a 190 inline bool getPosition(double *lon, double *lat){
Gaku0606 0:74d8e952a3bd 191 *lon = longitude;
Gaku0606 4:758f97bee95a 192 *lat = latitude;
Gaku0606 4:758f97bee95a 193 if(gps_readable) return true;
Gaku0606 4:758f97bee95a 194 else return false;
Gaku0606 0:74d8e952a3bd 195 }
Gaku0606 4:758f97bee95a 196
Gaku0606 5:15ff963f066b 197 /** 経度・緯度を取得できる関数
Gaku0606 13:3ee69851e270 198 * @brief 2つの配列に経度、緯度の順に値を代入する
Gaku0606 5:15ff963f066b 199 * @param lonlat double型 要素2の配列
Gaku0606 4:758f97bee95a 200 * @return データが有効かどうか 有効ならtrue, 無効ならfalse
Gaku0606 5:15ff963f066b 201 * @note 要素2の配列を作って、そのアドレスを引数に与えてください。
Gaku0606 4:758f97bee95a 202 */
Gaku0606 12:935b21d30ec2 203 inline bool getPosition(float *lonlat){
Gaku0606 0:74d8e952a3bd 204 lonlat[0] = longitude;
Gaku0606 4:758f97bee95a 205 lonlat[1] = latitude;
Gaku0606 4:758f97bee95a 206 if(gps_readable) return true;
Gaku0606 4:758f97bee95a 207 else return false;
Gaku0606 0:74d8e952a3bd 208 }
Gaku0606 4:758f97bee95a 209
Gaku0606 5:15ff963f066b 210 /** 日付・時刻を取得できる関数
Gaku0606 13:3ee69851e270 211 * @brief 6つの変数に年、月、日、時間、分、秒の順に値を代入する
Gaku0606 5:15ff963f066b 212 * @param _year int型 年 ポインタ
Gaku0606 5:15ff963f066b 213 * @param _month int型 月 ポインタ
Gaku0606 5:15ff963f066b 214 * @param _day int型 日 ポインタ
Gaku0606 5:15ff963f066b 215 * @param _hour int型 時間 ポインタ
Gaku0606 5:15ff963f066b 216 * @param _minutes int型 分 ポインタ
Gaku0606 12:935b21d30ec2 217 * @param _seconds float型 秒 ポインタ
Gaku0606 4:758f97bee95a 218 * @return データが有効かどうか 有効ならtrue, 無効ならfalse
Gaku0606 5:15ff963f066b 219 * @note 6つ変数を作って、そのアドレスを引数に与えてください。
Gaku0606 4:758f97bee95a 220 */
Gaku0606 12:935b21d30ec2 221 inline bool getUTC(int *_year, int *_month, int *_day, int *_hour, int *_minutes, float *_seconds){
Gaku0606 0:74d8e952a3bd 222 *_year = year;
Gaku0606 0:74d8e952a3bd 223 *_month = month;
Gaku0606 0:74d8e952a3bd 224 *_day = day;
Gaku0606 0:74d8e952a3bd 225 *_hour = hour;
Gaku0606 0:74d8e952a3bd 226 *_minutes = minutes;
Gaku0606 4:758f97bee95a 227 *_seconds = seconds;
Gaku0606 4:758f97bee95a 228 if(gps_readable) return true;
Gaku0606 4:758f97bee95a 229 else return false;
Gaku0606 0:74d8e952a3bd 230 }
Gaku0606 4:758f97bee95a 231
Gaku0606 5:15ff963f066b 232 /** 世界協定時間の日付・時刻を取得できる関数
Gaku0606 13:3ee69851e270 233 * @brief 要素数6の配列に年、月、日、時間、分、秒の順に値を代入する
Gaku0606 4:758f97bee95a 234 * @param (*_utc) float型 秒 アドレス
Gaku0606 4:758f97bee95a 235 * @return データが有効かどうか 有効ならtrue, 無効ならfalse
Gaku0606 4:758f97bee95a 236 * @detail 要素6の配列を作って、そのアドレスを引数に与えてください。
Gaku0606 4:758f97bee95a 237 */
Gaku0606 4:758f97bee95a 238 inline bool getUTC(float *_utc){
Gaku0606 0:74d8e952a3bd 239 _utc[0] = (float)year;
Gaku0606 0:74d8e952a3bd 240 _utc[1] = (float)month;
Gaku0606 0:74d8e952a3bd 241 _utc[2] = (float)day;
Gaku0606 0:74d8e952a3bd 242 _utc[3] = (float)hour;
Gaku0606 0:74d8e952a3bd 243 _utc[4] = (float)minutes;
Gaku0606 0:74d8e952a3bd 244 _utc[5] = seconds;
Gaku0606 4:758f97bee95a 245
Gaku0606 4:758f97bee95a 246 if(gps_readable) return true;
Gaku0606 4:758f97bee95a 247 else return false;
Gaku0606 0:74d8e952a3bd 248 }
Gaku0606 4:758f97bee95a 249
Gaku0606 5:15ff963f066b 250 /** 世界協定時間の日付・時刻を取得できる関数
Gaku0606 13:3ee69851e270 251 * @brief 要素数6の配列に年、月、日、時間、分、秒の順に値を代入する
Gaku0606 5:15ff963f066b 252 * @param _utc int型 秒 ポインタ
Gaku0606 4:758f97bee95a 253 * @return データが有効かどうか 有効ならtrue, 無効ならfalse
Gaku0606 5:15ff963f066b 254 * @note 要素6の配列を作って、そのアドレスを引数に与えてください。
Gaku0606 4:758f97bee95a 255 */
Gaku0606 4:758f97bee95a 256 inline bool getUTC(int *_utc){
Gaku0606 0:74d8e952a3bd 257 _utc[0] = year;
Gaku0606 0:74d8e952a3bd 258 _utc[1] = month;
Gaku0606 0:74d8e952a3bd 259 _utc[2] = day;
Gaku0606 0:74d8e952a3bd 260 _utc[3] = hour;
Gaku0606 0:74d8e952a3bd 261 _utc[4] = minutes;
Gaku0606 0:74d8e952a3bd 262 _utc[5] = (int)seconds;
Gaku0606 4:758f97bee95a 263 if(gps_readable) return true;
Gaku0606 4:758f97bee95a 264 else return false;
Gaku0606 0:74d8e952a3bd 265 }
Gaku0606 4:758f97bee95a 266
Gaku0606 5:15ff963f066b 267 /** 速度・進行方角を取得できる関数
Gaku0606 13:3ee69851e270 268 * @brief 2つの変数に速度、進行方角の順に値を代入する
Gaku0606 5:15ff963f066b 269 * @param _knot double型 経度 ポインタ [knot]
Gaku0606 5:15ff963f066b 270 * @param _degree double型 緯度 ポインタ [degree] 北から右回り正です。
Gaku0606 4:758f97bee95a 271 * @return データが有効かどうか 有効ならtrue, 無効ならfalse
Gaku0606 4:758f97bee95a 272 * @detail 2つ変数を作って、そのアドレスを引数に与えてください。
Gaku0606 4:758f97bee95a 273 */
Gaku0606 12:935b21d30ec2 274 inline bool getSpeedVector(float *_knot, float *_degree){
Gaku0606 2:7be89bab6db9 275 *_knot = knot;
Gaku0606 2:7be89bab6db9 276 *_degree = degree;
Gaku0606 4:758f97bee95a 277 if(gps_readable) return true;
Gaku0606 4:758f97bee95a 278 else return false;
Gaku0606 2:7be89bab6db9 279 }
Gaku0606 4:758f97bee95a 280
Gaku0606 5:15ff963f066b 281 /** 捕捉衛星数を取得できる関数
Gaku0606 13:3ee69851e270 282 * @brief 捕捉衛星数を返します。
Gaku0606 4:758f97bee95a 283 * @return int型 捕捉衛星数 アドレス
Gaku0606 4:758f97bee95a 284 */
Gaku0606 2:7be89bab6db9 285 inline int Number(){
Gaku0606 2:7be89bab6db9 286 return number;
Gaku0606 2:7be89bab6db9 287 }
Gaku0606 4:758f97bee95a 288
Gaku0606 5:15ff963f066b 289 /** 標高を取得できる関数
Gaku0606 13:3ee69851e270 290 * @brief 標高を返します。
Gaku0606 4:758f97bee95a 291 * @return double型 標高 アドレス
Gaku0606 4:758f97bee95a 292 */
Gaku0606 12:935b21d30ec2 293 inline float Height(){
Gaku0606 2:7be89bab6db9 294 return height;
Gaku0606 2:7be89bab6db9 295 }
Gaku0606 4:758f97bee95a 296
Gaku0606 4:758f97bee95a 297
Gaku0606 5:15ff963f066b 298 /** 速さを取得できる関数
Gaku0606 13:3ee69851e270 299 * @brief 速さを返します。
Gaku0606 4:758f97bee95a 300 * @return double型 速さ アドレス[knot]
Gaku0606 4:758f97bee95a 301 */
Gaku0606 12:935b21d30ec2 302 inline float Knot(){
Gaku0606 2:7be89bab6db9 303 return knot;
Gaku0606 2:7be89bab6db9 304 }
Gaku0606 4:758f97bee95a 305
Gaku0606 4:758f97bee95a 306
Gaku0606 5:15ff963f066b 307 /** 進行方角を取得できる関数
Gaku0606 13:3ee69851e270 308 * @brief 進行方角を返します。
Gaku0606 4:758f97bee95a 309 * @return double型 進行方角 アドレス 北から右回り正です。
Gaku0606 4:758f97bee95a 310 */
Gaku0606 12:935b21d30ec2 311 inline float Degree(){
Gaku0606 2:7be89bab6db9 312 return degree;
Gaku0606 2:7be89bab6db9 313 }
Gaku0606 8:3f32df2b66c0 314
Gaku0606 8:3f32df2b66c0 315 /** 目標座標までの直線距離を計算
Gaku0606 13:3ee69851e270 316 * @brief 距離を[m]で返します
Gaku0606 8:3f32df2b66c0 317 * @param x 目標経度
Gaku0606 8:3f32df2b66c0 318 * @param y 目標緯度
Gaku0606 8:3f32df2b66c0 319 */
Gaku0606 12:935b21d30ec2 320 float Distance(double x, double y);
Gaku0606 0:74d8e952a3bd 321 };
Gaku0606 1:57eeee14dd31 322 /////////////////
Gaku0606 1:57eeee14dd31 323 /////sample//////
Gaku0606 1:57eeee14dd31 324 /////////////////
Gaku0606 13:3ee69851e270 325 /**
Gaku0606 4:758f97bee95a 326 @code
Gaku0606 1:57eeee14dd31 327 #include "mbed.h"
Gaku0606 1:57eeee14dd31 328 #include "GPS_interrupt.h"
Gaku0606 1:57eeee14dd31 329 Serial pc(USBTX, USBRX);
Gaku0606 8:3f32df2b66c0 330 Serial mygps(p9, p10);
Gaku0606 0:74d8e952a3bd 331
Gaku0606 10:a006445dc76d 332 GPS_interrupt gps(&mygps);//, 115200, 10, 115200);
Gaku0606 2:7be89bab6db9 333
Gaku0606 2:7be89bab6db9 334 void bootFunction(){//do not need
Gaku0606 2:7be89bab6db9 335 pc.printf("\r\n");
Gaku0606 2:7be89bab6db9 336 pc.printf("start LPC1768 boot phase\r\n");
Gaku0606 2:7be89bab6db9 337 wait(0.5);
Gaku0606 2:7be89bab6db9 338 for(int i = 0;i < 100;i++){
Gaku0606 2:7be89bab6db9 339 pc.printf("Loading... : %3d [%%]\r", i);
Gaku0606 2:7be89bab6db9 340 wait(0.025);
Gaku0606 2:7be89bab6db9 341 }
Gaku0606 2:7be89bab6db9 342 pc.printf("Loading... : %3d [%%]\r\n", 100);
Gaku0606 2:7be89bab6db9 343 pc.printf("\t-> finished!!\r\n");
Gaku0606 2:7be89bab6db9 344 pc.printf("System : %d Hz\r\n", SystemCoreClock );
Gaku0606 2:7be89bab6db9 345 wait(0.5);
Gaku0606 2:7be89bab6db9 346 pc.printf("start main program\r\n");
Gaku0606 2:7be89bab6db9 347 wait(0.1);
Gaku0606 2:7be89bab6db9 348 pc.printf("initialize");
Gaku0606 2:7be89bab6db9 349 wait(0.75);
Gaku0606 2:7be89bab6db9 350 pc.printf(" -> OK\r\n");
Gaku0606 2:7be89bab6db9 351 wait(0.1);
Gaku0606 2:7be89bab6db9 352 pc.printf("GPS Connecting");
Gaku0606 2:7be89bab6db9 353 wait(0.5);
Gaku0606 2:7be89bab6db9 354 pc.printf(".");
Gaku0606 2:7be89bab6db9 355 wait(0.5);
Gaku0606 2:7be89bab6db9 356 pc.printf(".");
Gaku0606 2:7be89bab6db9 357 wait(0.5);
Gaku0606 2:7be89bab6db9 358 pc.printf(".");
Gaku0606 2:7be89bab6db9 359 wait(0.5);
Gaku0606 2:7be89bab6db9 360 pc.printf(".");
Gaku0606 2:7be89bab6db9 361 wait(0.5);
Gaku0606 2:7be89bab6db9 362 pc.printf(".");
Gaku0606 2:7be89bab6db9 363 wait(0.5);
Gaku0606 2:7be89bab6db9 364 pc.printf(".");
Gaku0606 2:7be89bab6db9 365 wait(0.5);
Gaku0606 2:7be89bab6db9 366 while(1){
Gaku0606 2:7be89bab6db9 367 if(gps.gps_readable) break;
Gaku0606 2:7be89bab6db9 368 }
Gaku0606 2:7be89bab6db9 369 pc.printf(" -> OK\r\n");
Gaku0606 2:7be89bab6db9 370 pc.printf("start!!\r\n\r\n");
Gaku0606 2:7be89bab6db9 371 wait(0.5);
Gaku0606 2:7be89bab6db9 372 }
Gaku0606 1:57eeee14dd31 373
Gaku0606 1:57eeee14dd31 374 int main() {
Gaku0606 1:57eeee14dd31 375
Gaku0606 1:57eeee14dd31 376 pc.baud(115200);
Gaku0606 2:7be89bab6db9 377 //mygps.baud(9600);
Gaku0606 1:57eeee14dd31 378
Gaku0606 2:7be89bab6db9 379 bootFunction();
Gaku0606 1:57eeee14dd31 380
Gaku0606 1:57eeee14dd31 381 while(1){
Gaku0606 2:7be89bab6db9 382 double xy[2] = {0};
Gaku0606 2:7be89bab6db9 383 float utc[6] = {0};
Gaku0606 2:7be89bab6db9 384 gps.getPosition(xy);
Gaku0606 2:7be89bab6db9 385 gps.getUTC(utc);
Gaku0606 2:7be89bab6db9 386 pc.printf("\033[K");
Gaku0606 2:7be89bab6db9 387 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]);
Gaku0606 2:7be89bab6db9 388 pc.printf("(%3.7fe,%3.7fn) ",xy[0], xy[1]);
Gaku0606 2:7be89bab6db9 389 pc.printf("%d satellites, %.2f[m], %.3f[m/s], %3.2f[degree]\r", gps.Number(), gps.Height(), gps.Knot()*1852/3600, gps.Degree());
Gaku0606 2:7be89bab6db9 390 wait(0.1);
Gaku0606 1:57eeee14dd31 391 }
Gaku0606 1:57eeee14dd31 392 }
Gaku0606 4:758f97bee95a 393 @codeend
Gaku0606 1:57eeee14dd31 394 */
Gaku0606 0:74d8e952a3bd 395 #endif