narumi tatsuya
/
hokkahokkatrei
ウソッキー
main.cpp@0:326c07d635d7, 2020-12-19 (annotated)
- Committer:
- naruu
- Date:
- Sat Dec 19 11:30:53 2020 +0000
- Revision:
- 0:326c07d635d7
GPS;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
naruu | 0:326c07d635d7 | 1 | #include "mbed.h" |
naruu | 0:326c07d635d7 | 2 | #include "getGPS.h" |
naruu | 0:326c07d635d7 | 3 | #include <stdio.h> |
naruu | 0:326c07d635d7 | 4 | #include <math.h> |
naruu | 0:326c07d635d7 | 5 | |
naruu | 0:326c07d635d7 | 6 | #define PIN_SDA D4 |
naruu | 0:326c07d635d7 | 7 | #define PIN_SCL D5 |
naruu | 0:326c07d635d7 | 8 | |
naruu | 0:326c07d635d7 | 9 | Serial pc(SERIAL_TX,SERIAL_RX,921600);//通信 |
naruu | 0:326c07d635d7 | 10 | Serial xbee(D1,D0);//Xbeeのピン |
naruu | 0:326c07d635d7 | 11 | GPS gps (D13,D12); |
naruu | 0:326c07d635d7 | 12 | |
naruu | 0:326c07d635d7 | 13 | int main(){ |
naruu | 0:326c07d635d7 | 14 | double a; |
naruu | 0:326c07d635d7 | 15 | double b; |
naruu | 0:326c07d635d7 | 16 | double distance; |
naruu | 0:326c07d635d7 | 17 | |
naruu | 0:326c07d635d7 | 18 | xbee.printf("GPS begin\n"); |
naruu | 0:326c07d635d7 | 19 | |
naruu | 0:326c07d635d7 | 20 | while(1){ |
naruu | 0:326c07d635d7 | 21 | if(gps.getgps()){ |
naruu | 0:326c07d635d7 | 22 | /*a,bを緯度経度の初期値で初期化*/ |
naruu | 0:326c07d635d7 | 23 | a=gps.latitude; |
naruu | 0:326c07d635d7 | 24 | b=gps.longitude; |
naruu | 0:326c07d635d7 | 25 | xbee.printf("(%lf,%lf)\r\n",a,b);//緯度と経度を表示 |
naruu | 0:326c07d635d7 | 26 | xbee.printf("--------------------------------\n\r"); |
naruu | 0:326c07d635d7 | 27 | break; |
naruu | 0:326c07d635d7 | 28 | }else{ |
naruu | 0:326c07d635d7 | 29 | xbee.printf("Fault_No_Data\r\n"); |
naruu | 0:326c07d635d7 | 30 | wait(1); |
naruu | 0:326c07d635d7 | 31 | } |
naruu | 0:326c07d635d7 | 32 | } |
naruu | 0:326c07d635d7 | 33 | while(1){ |
naruu | 0:326c07d635d7 | 34 | if(gps.getgps()){ |
naruu | 0:326c07d635d7 | 35 | xbee.printf("(%lf,%lf)\n\r",gps.latitude,gps.longitude);//緯度と経度を表示 |
naruu | 0:326c07d635d7 | 36 | xbee.printf("--------------------------------\n\r"); |
naruu | 0:326c07d635d7 | 37 | |
naruu | 0:326c07d635d7 | 38 | /*ここから距離の計算*/ |
naruu | 0:326c07d635d7 | 39 | /*c、dを得た緯度経度の値で初期化*/ |
naruu | 0:326c07d635d7 | 40 | double c; |
naruu | 0:326c07d635d7 | 41 | double d; |
naruu | 0:326c07d635d7 | 42 | c=gps.latitude; |
naruu | 0:326c07d635d7 | 43 | d=gps.longitude; |
naruu | 0:326c07d635d7 | 44 | |
naruu | 0:326c07d635d7 | 45 | const double pi=3.14159265359;//円周率 |
naruu | 0:326c07d635d7 | 46 | |
naruu | 0:326c07d635d7 | 47 | /*ラジアンに変換*/ |
naruu | 0:326c07d635d7 | 48 | double theta_a=a*pi/180; |
naruu | 0:326c07d635d7 | 49 | double theta_b=b*pi/180; |
naruu | 0:326c07d635d7 | 50 | double theta_c=c*pi/180; |
naruu | 0:326c07d635d7 | 51 | double theta_d=d*pi/180; |
naruu | 0:326c07d635d7 | 52 | |
naruu | 0:326c07d635d7 | 53 | double e=sin(theta_a)*sin(theta_c)+cos(theta_a)*cos(theta_c)*cos(theta_b-theta_d);//2点間のなす角を求める |
naruu | 0:326c07d635d7 | 54 | double theta_r=acos(e); |
naruu | 0:326c07d635d7 | 55 | |
naruu | 0:326c07d635d7 | 56 | const double earth_radius=6378140;//赤道半径 |
naruu | 0:326c07d635d7 | 57 | |
naruu | 0:326c07d635d7 | 58 | distance=earth_radius*theta_r;//距離の計算 |
naruu | 0:326c07d635d7 | 59 | |
naruu | 0:326c07d635d7 | 60 | /*距離が30m以上なら表示、通信*/ |
naruu | 0:326c07d635d7 | 61 | if(distance>=30){ |
naruu | 0:326c07d635d7 | 62 | pc.printf("run over 20m"); |
naruu | 0:326c07d635d7 | 63 | xbee.printf("run over 20m"); |
naruu | 0:326c07d635d7 | 64 | break; |
naruu | 0:326c07d635d7 | 65 | } |
naruu | 0:326c07d635d7 | 66 | |
naruu | 0:326c07d635d7 | 67 | }else { |
naruu | 0:326c07d635d7 | 68 | xbee.printf("False_No_Data\r\n"); |
naruu | 0:326c07d635d7 | 69 | pc.printf("False_No_Date\r\n"); |
naruu | 0:326c07d635d7 | 70 | wait(1); |
naruu | 0:326c07d635d7 | 71 | }//データ取得失敗を表示、通信、1秒待機 |
naruu | 0:326c07d635d7 | 72 | |
naruu | 0:326c07d635d7 | 73 | } |
naruu | 0:326c07d635d7 | 74 | xbee.printf("成功\n"); |
naruu | 0:326c07d635d7 | 75 | return 0; |
naruu | 0:326c07d635d7 | 76 | } |