GPSとXbeeの統合

Dependencies:   mbed

Committer:
saeichi
Date:
Wed Nov 13 12:14:34 2019 +0000
Revision:
5:f3b266c917a6
Parent:
4:88f7837f947f
GPSXbee

Who changed what in which revision?

UserRevisionLine numberNew contents of line
KINU 1:c142b1682312 1 #include "mbed.h"
KINU 1:c142b1682312 2 #include "getGPS.h"
KINU 1:c142b1682312 3 #include "math.h"
KINU 1:c142b1682312 4
KINU 1:c142b1682312 5 Serial pc(USBTX,USBRX);
KINU 2:639bfe0721a7 6 GPS gps (p28,p27);
saeichi 4:88f7837f947f 7 Serial xbee(p13,p14);
KINU 1:c142b1682312 8
KINU 1:c142b1682312 9
KINU 1:c142b1682312 10 int main() {
YUPPY 3:3cd62c194bd0 11 double a;
YUPPY 3:3cd62c194bd0 12 double b;
YUPPY 3:3cd62c194bd0 13 double distance;
KINU 1:c142b1682312 14
KINU 1:c142b1682312 15 pc.printf("GPS Start\n");
saeichi 5:f3b266c917a6 16 xbee.printf("s\n");
KINU 2:639bfe0721a7 17 while(1) {
KINU 2:639bfe0721a7 18 if(gps.getgps()){
KINU 1:c142b1682312 19 a = gps.latitude;
KINU 1:c142b1682312 20 b = gps.longitude;
KINU 1:c142b1682312 21
KINU 2:639bfe0721a7 22 pc.printf("(%lf,%lf)\r\n",gps.latitude,gps.longitude);//緯度と経度を表示
KINU 1:c142b1682312 23 break;
KINU 2:639bfe0721a7 24
KINU 2:639bfe0721a7 25 }else{
KINU 1:c142b1682312 26 pc.printf("NO DATA\r\n");//データ取得失敗
KINU 1:c142b1682312 27 wait(1);
KINU 1:c142b1682312 28 }
KINU 1:c142b1682312 29 }
KINU 2:639bfe0721a7 30 while(1){
KINU 2:639bfe0721a7 31 if(gps.getgps()) {
KINU 2:639bfe0721a7 32
YUPPY 3:3cd62c194bd0 33 pc.printf("(%lf,%lf)\n\r",gps.latitude,gps.longitude);//緯度と経度を表示
KINU 2:639bfe0721a7 34
YUPPY 3:3cd62c194bd0 35 // 球面三角法により、大円距離(メートル)を求める
YUPPY 3:3cd62c194bd0 36 double c;
YUPPY 3:3cd62c194bd0 37 double d;
YUPPY 3:3cd62c194bd0 38 c = gps.latitude;
YUPPY 3:3cd62c194bd0 39 d = gps.longitude;
KINU 2:639bfe0721a7 40
YUPPY 3:3cd62c194bd0 41 const double pi = 3.14159265359; // 円周率
KINU 2:639bfe0721a7 42
KINU 2:639bfe0721a7 43 double ra = a * pi / 180;
KINU 2:639bfe0721a7 44 double rb = b * pi / 180; // 緯度経度をラジアンに変換
KINU 2:639bfe0721a7 45 double rc = c * pi / 180;
KINU 2:639bfe0721a7 46 double rd = d * pi / 180;
YUPPY 3:3cd62c194bd0 47
KINU 2:639bfe0721a7 48 double e = sin(ra) * sin(rc) + cos(ra) * cos(rc) * cos(rb - rd); // 2点の中心角(ラジアン)を求める
KINU 2:639bfe0721a7 49 double rr = acos(e);
KINU 2:639bfe0721a7 50
KINU 2:639bfe0721a7 51 const double earth_radius = 6378140; // 地球赤道半径(m)
KINU 2:639bfe0721a7 52
YUPPY 3:3cd62c194bd0 53 distance = earth_radius * rr; // 2点間の距離(m)
YUPPY 3:3cd62c194bd0 54
KINU 2:639bfe0721a7 55
KINU 2:639bfe0721a7 56 if (distance<5){
KINU 2:639bfe0721a7 57 }else{
KINU 1:c142b1682312 58 pc.printf("5m clear!");
saeichi 4:88f7837f947f 59 xbee.printf("5m clear!");
KINU 1:c142b1682312 60 break;
KINU 2:639bfe0721a7 61 }
KINU 2:639bfe0721a7 62
KINU 1:c142b1682312 63 }else{
saeichi 4:88f7837f947f 64 xbee.printf("NO DATA\r\n");//データ取得失
saeichi 4:88f7837f947f 65 pc.printf("NO DATA\r\n");
KINU 1:c142b1682312 66 wait(1);
KINU 1:c142b1682312 67 }
KINU 1:c142b1682312 68 }
KINU 1:c142b1682312 69 return 0;
KINU 2:639bfe0721a7 70 }
KINU 2:639bfe0721a7 71
KINU 2:639bfe0721a7 72
KINU 2:639bfe0721a7 73
KINU 2:639bfe0721a7 74
KINU 2:639bfe0721a7 75
KINU 2:639bfe0721a7 76
KINU 2:639bfe0721a7 77