mainまでいけました カメラのとこからコンパイルできません
Dependencies: mbed CameraUS015sb612-3
main.cpp@2:e2b803e3bcbc, 2019-11-08 (annotated)
- Committer:
- YUPPY
- Date:
- Fri Nov 08 16:16:43 2019 +0000
- Revision:
- 2:e2b803e3bcbc
- Parent:
- 1:edc264954800
- Child:
- 3:5d0c4b13f4e8
main2
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
YUPPY | 0:6212b283430c | 1 | #define cansatB |
YUPPY | 2:e2b803e3bcbc | 2 | #include "mbed.h" //mbed |
YUPPY | 2:e2b803e3bcbc | 3 | #include "getGPS.h" //GPS |
YUPPY | 2:e2b803e3bcbc | 4 | #include "math.h" //GPS |
YUPPY | 2:e2b803e3bcbc | 5 | #include "XBee.h" //XBee |
YUPPY | 0:6212b283430c | 6 | #include <SoftwareSerial.h> //カメラ |
YUPPY | 0:6212b283430c | 7 | #include <SD.h>//SDカード |
YUPPY | 0:6212b283430c | 8 | #include <JPEGCamera.h>//カメラ |
YUPPY | 2:e2b803e3bcbc | 9 | #include "us015.h" // 超音波センサ |
YUPPY | 0:6212b283430c | 10 | #include <stdio.h> |
YUPPY | 2:e2b803e3bcbc | 11 | US015 hs(p12,p11); //P12 :超音波センサ トリガ出力 //p11 :超音波センサ エコー入力 |
YUPPY | 2:e2b803e3bcbc | 12 | Serial pc(USBTX,USBRX); //GPs |
YUPPY | 2:e2b803e3bcbc | 13 | GPS gps (p28,p27); //GPS |
YUPPY | 0:6212b283430c | 14 | PwmOut motorSpeedR(p26); //モーター |
YUPPY | 0:6212b283430c | 15 | PwmOut motorSpeedL(p25); //モーター |
YUPPY | 0:6212b283430c | 16 | DigitalIn flight(p22,p23); //フライトピン |
YUPPY | 2:e2b803e3bcbc | 17 | DigitalOut FET(p21); //FET |
YUPPY | 0:6212b283430c | 18 | XBee xbee(p13, p14); // XBee |
YUPPY | 2:e2b803e3bcbc | 19 | DigitalIn thermo(p20); //焦電センサ↓ |
YUPPY | 2:e2b803e3bcbc | 20 | DigitalOut led(LED1); |
YUPPY | 2:e2b803e3bcbc | 21 | Serial pc(USBTX, USBRX); // tx, rx 焦電センサ↑ |
YUPPY | 0:6212b283430c | 22 | Serial pc (p9); //カメラ |
YUPPY | 0:6212b283430c | 23 | //Motor motor1(p22, p16, p17, 1); // pwm, fwd, rev, can brake モーター |
YUPPY | 0:6212b283430c | 24 | //Motor motor2(p22, p19, p20, 1); // pwm, fwd, rev, can brake |
YUPPY | 2:e2b803e3bcbc | 25 | |
YUPPY | 2:e2b803e3bcbc | 26 | int main() { //FET |
YUPPY | 2:e2b803e3bcbc | 27 | FET = 0; |
YUPPY | 2:e2b803e3bcbc | 28 | SW = 1; //p21をhigh(3.3V)にする。 |
YUPPY | 2:e2b803e3bcbc | 29 | while(1) { |
YUPPY | 2:e2b803e3bcbc | 30 | if(flight==1) { |
YUPPY | 2:e2b803e3bcbc | 31 | wait(10); |
YUPPY | 2:e2b803e3bcbc | 32 | } |
YUPPY | 2:e2b803e3bcbc | 33 | |
YUPPY | 2:e2b803e3bcbc | 34 | else{ |
YUPPY | 2:e2b803e3bcbc | 35 | if(flight==1) { |
YUPPY | 2:e2b803e3bcbc | 36 | wait(10); |
YUPPY | 2:e2b803e3bcbc | 37 | } |
YUPPY | 2:e2b803e3bcbc | 38 | else{ |
YUPPY | 2:e2b803e3bcbc | 39 | FET = 0; //FET、ニクロム線切断 |
YUPPY | 2:e2b803e3bcbc | 40 | wait(20); |
YUPPY | 2:e2b803e3bcbc | 41 | FET = 1; |
YUPPY | 2:e2b803e3bcbc | 42 | wait(12); |
YUPPY | 2:e2b803e3bcbc | 43 | FET = 0; |
YUPPY | 2:e2b803e3bcbc | 44 | wait(10); |
YUPPY | 2:e2b803e3bcbc | 45 | FET = 1; |
YUPPY | 2:e2b803e3bcbc | 46 | wait(12); |
YUPPY | 2:e2b803e3bcbc | 47 | FET = 0; |
YUPPY | 2:e2b803e3bcbc | 48 | SW = 0; //p21をlow(0V)にする。 |
YUPPY | 2:e2b803e3bcbc | 49 | break; |
YUPPY | 2:e2b803e3bcbc | 50 | } |
YUPPY | 2:e2b803e3bcbc | 51 | } |
YUPPY | 2:e2b803e3bcbc | 52 | } |
YUPPY | 2:e2b803e3bcbc | 53 | } |
YUPPY | 2:e2b803e3bcbc | 54 | |
YUPPY | 2:e2b803e3bcbc | 55 | int main() { //以下GPS |
YUPPY | 2:e2b803e3bcbc | 56 | double a; |
YUPPY | 2:e2b803e3bcbc | 57 | double b; |
YUPPY | 2:e2b803e3bcbc | 58 | double distance; |
YUPPY | 2:e2b803e3bcbc | 59 | |
YUPPY | 2:e2b803e3bcbc | 60 | pc.printf("GPS Start\r\n"); |
YUPPY | 2:e2b803e3bcbc | 61 | |
YUPPY | 2:e2b803e3bcbc | 62 | while(1) { |
YUPPY | 2:e2b803e3bcbc | 63 | if(gps.getgps()){ |
YUPPY | 2:e2b803e3bcbc | 64 | a = gps.latitude; |
YUPPY | 2:e2b803e3bcbc | 65 | b = gps.longitude; |
YUPPY | 2:e2b803e3bcbc | 66 | |
YUPPY | 2:e2b803e3bcbc | 67 | pc.printf("(%lf,%lf)\r\n",gps.latitude,gps.longitude);//緯度と経度を表示 |
YUPPY | 2:e2b803e3bcbc | 68 | |
YUPPY | 2:e2b803e3bcbc | 69 | break; |
YUPPY | 2:e2b803e3bcbc | 70 | |
YUPPY | 2:e2b803e3bcbc | 71 | }else{ |
YUPPY | 2:e2b803e3bcbc | 72 | pc.printf("NO DATA\r\n");//データ取得失敗 |
YUPPY | 2:e2b803e3bcbc | 73 | wait(1); |
YUPPY | 2:e2b803e3bcbc | 74 | } |
YUPPY | 2:e2b803e3bcbc | 75 | } |
YUPPY | 2:e2b803e3bcbc | 76 | while(1){ |
YUPPY | 2:e2b803e3bcbc | 77 | if(gps.getgps()) { |
YUPPY | 2:e2b803e3bcbc | 78 | |
YUPPY | 2:e2b803e3bcbc | 79 | pc.printf("(%lf,%lf)\n\r",gps.latitude,gps.longitude);//緯度と経度を表示 |
YUPPY | 2:e2b803e3bcbc | 80 | |
YUPPY | 2:e2b803e3bcbc | 81 | // 球面三角法により、大円距離(メートル)を求める |
YUPPY | 2:e2b803e3bcbc | 82 | double c; |
YUPPY | 2:e2b803e3bcbc | 83 | double d; |
YUPPY | 2:e2b803e3bcbc | 84 | c = gps.latitude; |
YUPPY | 2:e2b803e3bcbc | 85 | d = gps.longitude; |
YUPPY | 2:e2b803e3bcbc | 86 | |
YUPPY | 2:e2b803e3bcbc | 87 | const double pi = 3.14159265359; // 円周率 |
YUPPY | 2:e2b803e3bcbc | 88 | |
YUPPY | 2:e2b803e3bcbc | 89 | double ra = a * pi / 180; |
YUPPY | 2:e2b803e3bcbc | 90 | double rb = b * pi / 180; // 緯度経度をラジアンに変換 |
YUPPY | 2:e2b803e3bcbc | 91 | double rc = c * pi / 180; |
YUPPY | 2:e2b803e3bcbc | 92 | double rd = d * pi / 180; |
YUPPY | 2:e2b803e3bcbc | 93 | |
YUPPY | 2:e2b803e3bcbc | 94 | double e = sin(ra) * sin(rc) + cos(ra) * cos(rc) * cos(rb - rd); // 2点の中心角(ラジアン)を求める |
YUPPY | 2:e2b803e3bcbc | 95 | double rr = acos(e); |
YUPPY | 2:e2b803e3bcbc | 96 | |
YUPPY | 2:e2b803e3bcbc | 97 | const double earth_radius = 6378140; // 地球赤道半径(m) |
YUPPY | 2:e2b803e3bcbc | 98 | |
YUPPY | 2:e2b803e3bcbc | 99 | distance = earth_radius * rr; // 2点間の距離(m) |
YUPPY | 2:e2b803e3bcbc | 100 | |
YUPPY | 2:e2b803e3bcbc | 101 | |
YUPPY | 2:e2b803e3bcbc | 102 | |
YUPPY | 2:e2b803e3bcbc | 103 | |
YUPPY | 2:e2b803e3bcbc | 104 | if (distance<5){ |
YUPPY | 2:e2b803e3bcbc | 105 | printf("%lf\r\n",distance); |
YUPPY | 2:e2b803e3bcbc | 106 | }else{ |
YUPPY | 2:e2b803e3bcbc | 107 | pc.printf("5m clear!"); |
YUPPY | 2:e2b803e3bcbc | 108 | break; |
YUPPY | 2:e2b803e3bcbc | 109 | } |
YUPPY | 2:e2b803e3bcbc | 110 | |
YUPPY | 2:e2b803e3bcbc | 111 | }else{ |
YUPPY | 2:e2b803e3bcbc | 112 | pc.printf("NO DATA\r\n");//データ取得失敗 |
YUPPY | 2:e2b803e3bcbc | 113 | wait(1); |
YUPPY | 2:e2b803e3bcbc | 114 | } |
YUPPY | 2:e2b803e3bcbc | 115 | } |
YUPPY | 2:e2b803e3bcbc | 116 | return 0; //注意!void()に変えること.このままだとここで終わる |
YUPPY | 2:e2b803e3bcbc | 117 | } |
YUPPY | 2:e2b803e3bcbc | 118 | |
YUPPY | 2:e2b803e3bcbc | 119 | |
YUPPY | 0:6212b283430c | 120 | void motorForwardR(void); |
YUPPY | 0:6212b283430c | 121 | void motorStopR(void); |
YUPPY | 0:6212b283430c | 122 | void motorReverseR(void); |
YUPPY | 0:6212b283430c | 123 | void motorForwardL(void); |
YUPPY | 0:6212b283430c | 124 | void motorStopL(void); |
YUPPY | 0:6212b283430c | 125 | void motorReverseL(void); |
YUPPY | 0:6212b283430c | 126 | LocalFileSystem local(“local”); // Create the local filesystem under the name “local” データ保存 |
YUPPY | 0:6212b283430c | 127 | float culculate_distance_3(float a,float b); |
YUPPY | 2:e2b803e3bcbc | 128 | |
YUPPY | 0:6212b283430c | 129 | motorStopR(); |
YUPPY | 0:6212b283430c | 130 | motorStopL(); |
YUPPY | 0:6212b283430c | 131 | wait(20); //確認用//デフォ20秒 |
YUPPY | 0:6212b283430c | 132 | // FILE *fp = fopen(“/local/gps.txt”, “w”); // Open “gps.txt” on the local file system for writing |
YUPPY | 0:6212b283430c | 133 | motorSpeedR.period_ms(4); //モーター調節 |
YUPPY | 0:6212b283430c | 134 | motorSpeedR = 0.655; |
YUPPY | 0:6212b283430c | 135 | motorSpeedL.period_ms(4); //モーター調節 |
YUPPY | 0:6212b283430c | 136 | motorSpeedL = 0.755; |
YUPPY | 0:6212b283430c | 137 | motorForwardL(); //車体を時計回りに3秒回転 |
YUPPY | 0:6212b283430c | 138 | motorReverseR(); |
YUPPY | 0:6212b283430c | 139 | wait(1.6); |
YUPPY | 0:6212b283430c | 140 | motorStopR(); |
YUPPY | 0:6212b283430c | 141 | motorStopL(); |
YUPPY | 0:6212b283430c | 142 | wait(1); |
YUPPY | 0:6212b283430c | 143 | motorReverseL(); //車体を反時計回りに3秒回転 |
YUPPY | 0:6212b283430c | 144 | motorForwardR(); |
YUPPY | 0:6212b283430c | 145 | wait(1.6); |
YUPPY | 0:6212b283430c | 146 | motorStopR(); |
YUPPY | 0:6212b283430c | 147 | motorStopL(); |
YUPPY | 0:6212b283430c | 148 | wait(1); |
YUPPY | 0:6212b283430c | 149 | printf(“compass carriblation\r\n”); //キャリブレーション終了 |
YUPPY | 0:6212b283430c | 150 | //float mcn1,mcn2; |
YUPPY | 0:6212b283430c | 151 | |
YUPPY | 2:e2b803e3bcbc | 152 | if(distance<2000){ |
YUPPY | 1:edc264954800 | 153 | motorStopR(); |
YUPPY | 1:edc264954800 | 154 | motorStopL(); |
YUPPY | 1:edc264954800 | 155 | stopUS015(); |
YUPPY | 1:edc264954800 | 156 | startsb612a(); |
YUPPY | 0:6212b283430c | 157 | //超音波センサー反応あり |
YUPPY | 0:6212b283430c | 158 | //停止 |
YUPPY | 0:6212b283430c | 159 | //超音波センサーOFF |
YUPPY | 0:6212b283430c | 160 | //焦電センサーON |
YUPPY | 2:e2b803e3bcbc | 161 | int main() |
YUPPY | 2:e2b803e3bcbc | 162 | { |
YUPPY | 2:e2b803e3bcbc | 163 | float th; |
YUPPY | 2:e2b803e3bcbc | 164 | Timer tm; |
YUPPY | 2:e2b803e3bcbc | 165 | pc.printf("start\r\n"); |
YUPPY | 2:e2b803e3bcbc | 166 | led=0; |
YUPPY | 2:e2b803e3bcbc | 167 | bool detected=false; |
YUPPY | 2:e2b803e3bcbc | 168 | while(true) |
YUPPY | 2:e2b803e3bcbc | 169 | { |
YUPPY | 2:e2b803e3bcbc | 170 | th = thermo; |
YUPPY | 2:e2b803e3bcbc | 171 | if(th==1 && !detected) { |
YUPPY | 2:e2b803e3bcbc | 172 | led = 1; |
YUPPY | 2:e2b803e3bcbc | 173 | detected=true; |
YUPPY | 2:e2b803e3bcbc | 174 | pc.printf("human\r\n"); |
YUPPY | 2:e2b803e3bcbc | 175 | tm.reset(); |
YUPPY | 2:e2b803e3bcbc | 176 | tm.start(); |
YUPPY | 2:e2b803e3bcbc | 177 | } |
YUPPY | 2:e2b803e3bcbc | 178 | if(tm.read_ms()>10000) { |
YUPPY | 2:e2b803e3bcbc | 179 | printf("Time out!\r\n"); |
YUPPY | 2:e2b803e3bcbc | 180 | led = 0; |
YUPPY | 2:e2b803e3bcbc | 181 | detected=false; |
YUPPY | 2:e2b803e3bcbc | 182 | } |
YUPPY | 2:e2b803e3bcbc | 183 | } |
YUPPY | 2:e2b803e3bcbc | 184 | } |
YUPPY | 1:edc264954800 | 185 | if(detected=true){ |
YUPPY | 1:edc264954800 | 186 | stopsb612a(); |
YUPPY | 1:edc264954800 | 187 | startCamera(); |
YUPPY | 1:edc264954800 | 188 | stopCamera(); |
YUPPY | 1:edc264954800 | 189 | sendSD(); |
YUPPY | 1:edc264954800 | 190 | sendPC(); |
YUPPY | 1:edc264954800 | 191 | |
YUPPY | 0:6212b283430c | 192 | //焦電センサー反応あり |
YUPPY | 0:6212b283430c | 193 | //焦電センサーOFF |
YUPPY | 0:6212b283430c | 194 | //カメラ起動 |
YUPPY | 0:6212b283430c | 195 | //カメラOFF |
YUPPY | 0:6212b283430c | 196 | //データをSDカードに保存 |
YUPPY | 0:6212b283430c | 197 | //保存データをXBeeによりPCへ送信 |
YUPPY | 1:edc264954800 | 198 | if(receiveOK()=true){ |
YUPPY | 1:edc264954800 | 199 | printf("Unknown Creature has been descovered!\n"); |
YUPPY | 1:edc264954800 | 200 | } |
YUPPY | 0:6212b283430c | 201 | //"OK"受信、ミッション終了 |
YUPPY | 1:edc264954800 | 202 | else if(receiveOK()=false){ |
YUPPY | 1:edc264954800 | 203 | printf("Continue!\n"); |
YUPPY | 1:edc264954800 | 204 | } |
YUPPY | 0:6212b283430c | 205 | //"NO"受信、ミッション再開 |
YUPPY | 0:6212b283430c | 206 | |
YUPPY | 1:edc264954800 | 207 | else if(detected=false){ |
YUPPY | 1:edc264954800 | 208 | stopsb612a(); |
YUPPY | 1:edc264954800 | 209 | motorForwardL(); |
YUPPY | 1:edc264954800 | 210 | motorStopL(); |
YUPPY | 1:edc264954800 | 211 | motorForwardR(); |
YUPPY | 1:edc264954800 | 212 | motorForwardL(); |
YUPPY | 1:edc264954800 | 213 | startUS015(); |
YUPPY | 1:edc264954800 | 214 | } |
YUPPY | 1:edc264954800 | 215 | } |
YUPPY | 0:6212b283430c | 216 | //焦電センサー反応無し |
YUPPY | 0:6212b283430c | 217 | //焦電センサーOFF |
YUPPY | 0:6212b283430c | 218 | //方向転換 |
YUPPY | 0:6212b283430c | 219 | //超音波センサーON |
YUPPY | 0:6212b283430c | 220 | //直進 |
YUPPY | 1:edc264954800 | 221 | } |
YUPPY | 2:e2b803e3bcbc | 222 | else if(distance>=2000){ |
YUPPY | 1:edc264954800 | 223 | motorStopL(); |
YUPPY | 1:edc264954800 | 224 | motorStopR(); |
YUPPY | 1:edc264954800 | 225 | motorForwardL(); |
YUPPY | 1:edc264954800 | 226 | motorStopL(); |
YUPPY | 1:edc264954800 | 227 | motorForwardR(); |
YUPPY | 1:edc264954800 | 228 | motorForwardL(); |
YUPPY | 1:edc264954800 | 229 | } |
YUPPY | 0:6212b283430c | 230 | //超音波センサー反応無し |
YUPPY | 0:6212b283430c | 231 | //停止 |
YUPPY | 0:6212b283430c | 232 | //方向転換 |
YUPPY | 0:6212b283430c | 233 | //直進 |