ウソッキー

Dependencies:   mbed

Committer:
naruu
Date:
Sat Dec 19 11:30:53 2020 +0000
Revision:
0:326c07d635d7
GPS;

Who changed what in which revision?

UserRevisionLine numberNew 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 }