2017年伊豆大島共同打ち上げ実験用電装モジュール搭載GPS測位プログラム
Dependents: Hybrid_interruptGPS Hybrid_main_FirstEdtion rocket_logger_sinkan2018_v1 HYBRYD2018_IZU_ROCKET ... more
GPS_interrupt.h@16:ded6e8e2850f, 2018-05-25 (annotated)
- Committer:
- Sigma884
- Date:
- Fri May 25 21:54:50 2018 +0000
- Revision:
- 16:ded6e8e2850f
- Parent:
- 15:6b1ed321c1be
???????????????????????????
Who changed what in which revision?
User | Revision | Line number | New 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 |