GPS,LPC,xbee==

Dependencies:   mbed LPS25HB_I2C

Committer:
kosukesuzuki
Date:
Fri Aug 05 10:29:38 2022 +0000
Revision:
1:bfd9df900c4f
Parent:
0:f20bcf1efbc2
?

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kosukesuzuki 0:f20bcf1efbc2 1 #include "mbed.h"
kosukesuzuki 0:f20bcf1efbc2 2
kosukesuzuki 0:f20bcf1efbc2 3 //#include "" //SDcardで使用
kosukesuzuki 0:f20bcf1efbc2 4
kosukesuzuki 0:f20bcf1efbc2 5 #include "LPS.h" //気圧で使用
kosukesuzuki 0:f20bcf1efbc2 6
kosukesuzuki 0:f20bcf1efbc2 7 #include "math.h" //GPSで使用
kosukesuzuki 0:f20bcf1efbc2 8
kosukesuzuki 1:bfd9df900c4f 9 Serial xbee(PB_6, PB_7); //xbee pin
kosukesuzuki 1:bfd9df900c4f 10 //Serial gps(D1,D0); //GPS後で変える
kosukesuzuki 0:f20bcf1efbc2 11 Serial pc(USBRX,USBTX); //衛星側のpin
kosukesuzuki 0:f20bcf1efbc2 12
kosukesuzuki 0:f20bcf1efbc2 13 I2C i2c(D0,D1); //気圧 pin
kosukesuzuki 0:f20bcf1efbc2 14 LPS ps(i2c);
kosukesuzuki 0:f20bcf1efbc2 15
kosukesuzuki 0:f20bcf1efbc2 16
kosukesuzuki 0:f20bcf1efbc2 17 Timer t; //時間を定義
kosukesuzuki 0:f20bcf1efbc2 18 const float dt = 1; //wait_us(dt)で使用:データの間隔
kosukesuzuki 0:f20bcf1efbc2 19
kosukesuzuki 0:f20bcf1efbc2 20
kosukesuzuki 0:f20bcf1efbc2 21 int i; //回数カウント用
kosukesuzuki 0:f20bcf1efbc2 22
kosukesuzuki 0:f20bcf1efbc2 23 float data1[10]; //気圧の較正用データ
kosukesuzuki 0:f20bcf1efbc2 24 float sum = 0; //合計値(初期化)
kosukesuzuki 0:f20bcf1efbc2 25 float ave; //気圧の標高平均
kosukesuzuki 0:f20bcf1efbc2 26
kosukesuzuki 0:f20bcf1efbc2 27
kosukesuzuki 0:f20bcf1efbc2 28 //データ格納
kosukesuzuki 0:f20bcf1efbc2 29 //気圧センサ
kosukesuzuki 0:f20bcf1efbc2 30 float dataPa[10]; //気圧 圧力
kosukesuzuki 0:f20bcf1efbc2 31 float dataAl[10]; //気圧 標高
kosukesuzuki 0:f20bcf1efbc2 32 float dataTe[10]; //気圧 温度
kosukesuzuki 0:f20bcf1efbc2 33
kosukesuzuki 1:bfd9df900c4f 34 /*
kosukesuzuki 0:f20bcf1efbc2 35 //GPSセンサ
kosukesuzuki 0:f20bcf1efbc2 36 float dataLat[10]; //GSP 緯度
kosukesuzuki 0:f20bcf1efbc2 37 float dataLon[10]; //GPS 経度
kosukesuzuki 0:f20bcf1efbc2 38 float dataH[10]; //GPS ジオイド高さ
kosukesuzuki 1:bfd9df900c4f 39 */
kosukesuzuki 0:f20bcf1efbc2 40
kosukesuzuki 1:bfd9df900c4f 41 /*
kosukesuzuki 0:f20bcf1efbc2 42
kosukesuzuki 0:f20bcf1efbc2 43 //GPS
kosukesuzuki 0:f20bcf1efbc2 44 Timer timer_open;
kosukesuzuki 0:f20bcf1efbc2 45 Timer timer_log;
kosukesuzuki 0:f20bcf1efbc2 46 Ticker tic_open;
kosukesuzuki 0:f20bcf1efbc2 47 Ticker tic_log;
kosukesuzuki 0:f20bcf1efbc2 48
kosukesuzuki 0:f20bcf1efbc2 49 float _DMS2DEG(float raw_data);
kosukesuzuki 0:f20bcf1efbc2 50 int _imput(char cha);
kosukesuzuki 0:f20bcf1efbc2 51
kosukesuzuki 0:f20bcf1efbc2 52 float Time;
kosukesuzuki 0:f20bcf1efbc2 53 char gps_data[256];
kosukesuzuki 0:f20bcf1efbc2 54 int cnt_gps;
kosukesuzuki 0:f20bcf1efbc2 55 int Cnt_GPS=0;
kosukesuzuki 0:f20bcf1efbc2 56
kosukesuzuki 1:bfd9df900c4f 57 */
kosukesuzuki 0:f20bcf1efbc2 58
kosukesuzuki 0:f20bcf1efbc2 59 int main() { //1
kosukesuzuki 0:f20bcf1efbc2 60
kosukesuzuki 0:f20bcf1efbc2 61 pc.printf("settig start\r\n");
kosukesuzuki 0:f20bcf1efbc2 62 xbee.printf("settig start\r\n");
kosukesuzuki 0:f20bcf1efbc2 63
kosukesuzuki 0:f20bcf1efbc2 64 /**************************************************************/
kosukesuzuki 0:f20bcf1efbc2 65 //ここに気圧の標高の較正とGPSの接続を行う。
kosukesuzuki 0:f20bcf1efbc2 66
kosukesuzuki 0:f20bcf1efbc2 67 //気圧(所要時間約20秒)
kosukesuzuki 0:f20bcf1efbc2 68 if (!ps.init()){ //2
kosukesuzuki 0:f20bcf1efbc2 69 printf("Failed to autodetect pressure sensor!\r\n");
kosukesuzuki 0:f20bcf1efbc2 70 while (1);
kosukesuzuki 0:f20bcf1efbc2 71 } //2
kosukesuzuki 0:f20bcf1efbc2 72
kosukesuzuki 0:f20bcf1efbc2 73 ps.enableDefault();
kosukesuzuki 0:f20bcf1efbc2 74
kosukesuzuki 0:f20bcf1efbc2 75 for(i=0;i<10;i++){ //2
kosukesuzuki 0:f20bcf1efbc2 76 float pressure = ps.readPressureMillibars();
kosukesuzuki 0:f20bcf1efbc2 77 float altitude = ps.pressureToAltitudeMeters(pressure);
kosukesuzuki 0:f20bcf1efbc2 78 float temperature = ps.readTemperatureC();
kosukesuzuki 0:f20bcf1efbc2 79 wait(1);
kosukesuzuki 0:f20bcf1efbc2 80 } //2
kosukesuzuki 0:f20bcf1efbc2 81
kosukesuzuki 0:f20bcf1efbc2 82 for(i=0;i<10;i++){ //2
kosukesuzuki 0:f20bcf1efbc2 83 float pressure = ps.readPressureMillibars();
kosukesuzuki 0:f20bcf1efbc2 84 float altitude = ps.pressureToAltitudeMeters(pressure);
kosukesuzuki 0:f20bcf1efbc2 85 data1[i] = altitude;
kosukesuzuki 0:f20bcf1efbc2 86 sum = sum + data1[i];
kosukesuzuki 0:f20bcf1efbc2 87 wait(1);
kosukesuzuki 0:f20bcf1efbc2 88 } //2
kosukesuzuki 0:f20bcf1efbc2 89
kosukesuzuki 0:f20bcf1efbc2 90 ave = sum/10;
kosukesuzuki 0:f20bcf1efbc2 91 xbee.printf("0 altitude = %f\r\n",ave);
kosukesuzuki 0:f20bcf1efbc2 92
kosukesuzuki 1:bfd9df900c4f 93 /*
kosukesuzuki 0:f20bcf1efbc2 94 //GPS
kosukesuzuki 0:f20bcf1efbc2 95 while(1){ //2
kosukesuzuki 0:f20bcf1efbc2 96 if(gps.readable()){ //3
kosukesuzuki 0:f20bcf1efbc2 97 gps_data[cnt_gps]=gps.getc();
kosukesuzuki 0:f20bcf1efbc2 98 if(gps_data[cnt_gps]=='$' || cnt_gps==256){ //4
kosukesuzuki 0:f20bcf1efbc2 99 cnt_gps=0;
kosukesuzuki 0:f20bcf1efbc2 100 memset(gps_data,'\0',256);
kosukesuzuki 0:f20bcf1efbc2 101 }else if (gps_data[cnt_gps]=='\r'){ //4
kosukesuzuki 0:f20bcf1efbc2 102 float world_time, lon_east, lat_north;
kosukesuzuki 0:f20bcf1efbc2 103 int rlock, sat_num;
kosukesuzuki 0:f20bcf1efbc2 104 char lat,lon;
kosukesuzuki 0:f20bcf1efbc2 105 if(sscanf(gps_data,"GPGGA,%f,%f,%c,%f,%c,%d,%d",&world_time,&lat_north,&lat,&lon_east,&lon,&rlock,&sat_num)>=1){ //5
kosukesuzuki 0:f20bcf1efbc2 106 if(rlock==1){ //6
kosukesuzuki 0:f20bcf1efbc2 107 lat_north=_DMS2DEG(lat_north);
kosukesuzuki 0:f20bcf1efbc2 108 lon_east=_DMS2DEG(lon_east);
kosukesuzuki 0:f20bcf1efbc2 109 //printf("Lat:%f,Lon:%f\r\ntime:%f,sat_num:%d\r\n",
kosukesuzuki 0:f20bcf1efbc2 110 //lat_north,lon_east,world_time,sat_num);
kosukesuzuki 0:f20bcf1efbc2 111
kosukesuzuki 0:f20bcf1efbc2 112 /*******************************/
kosukesuzuki 0:f20bcf1efbc2 113
kosukesuzuki 1:bfd9df900c4f 114 //goto lav;
kosukesuzuki 0:f20bcf1efbc2 115
kosukesuzuki 0:f20bcf1efbc2 116 /*******************************/
kosukesuzuki 1:bfd9df900c4f 117 /*//koko
kosukesuzuki 0:f20bcf1efbc2 118
kosukesuzuki 0:f20bcf1efbc2 119 }else{//6
kosukesuzuki 0:f20bcf1efbc2 120 //printf("%s\r\n",gps_data);
kosukesuzuki 0:f20bcf1efbc2 121 } //6
kosukesuzuki 0:f20bcf1efbc2 122 } //5
kosukesuzuki 0:f20bcf1efbc2 123 }else{ //4
kosukesuzuki 0:f20bcf1efbc2 124 cnt_gps++;
kosukesuzuki 0:f20bcf1efbc2 125 } //4
kosukesuzuki 0:f20bcf1efbc2 126 }//3
kosukesuzuki 0:f20bcf1efbc2 127 if(timer_log.read()>=30.0*60.0) timer_log.reset();
kosukesuzuki 0:f20bcf1efbc2 128 }//2
kosukesuzuki 0:f20bcf1efbc2 129
kosukesuzuki 0:f20bcf1efbc2 130
kosukesuzuki 0:f20bcf1efbc2 131 lav: //goto lav;より
kosukesuzuki 1:bfd9df900c4f 132
kosukesuzuki 0:f20bcf1efbc2 133 /**************************************************************/
kosukesuzuki 0:f20bcf1efbc2 134
kosukesuzuki 0:f20bcf1efbc2 135
kosukesuzuki 0:f20bcf1efbc2 136 //準備完了
kosukesuzuki 0:f20bcf1efbc2 137
kosukesuzuki 0:f20bcf1efbc2 138 pc.printf("Ok\r\n");
kosukesuzuki 0:f20bcf1efbc2 139 xbee.printf("Ok\r\n");
kosukesuzuki 0:f20bcf1efbc2 140
kosukesuzuki 0:f20bcf1efbc2 141 for (;;) { //2
kosukesuzuki 0:f20bcf1efbc2 142
kosukesuzuki 0:f20bcf1efbc2 143 //if (pc.readable()) xbee.putc(pc.getc());
kosukesuzuki 0:f20bcf1efbc2 144 if (xbee.readable()) pc.putc(xbee.getc());
kosukesuzuki 0:f20bcf1efbc2 145 wait_us(1);
kosukesuzuki 0:f20bcf1efbc2 146
kosukesuzuki 0:f20bcf1efbc2 147 char cmd1 = xbee.getc();
kosukesuzuki 0:f20bcf1efbc2 148
kosukesuzuki 1:bfd9df900c4f 149 /*
kosukesuzuki 0:f20bcf1efbc2 150 //↓↓↓継続してGPSをとるため
kosukesuzuki 0:f20bcf1efbc2 151 if(gps.readable()){ //3
kosukesuzuki 0:f20bcf1efbc2 152 gps_data[cnt_gps]=gps.getc();
kosukesuzuki 0:f20bcf1efbc2 153 if(gps_data[cnt_gps]=='$' || cnt_gps==256){ //4
kosukesuzuki 0:f20bcf1efbc2 154 cnt_gps=0;
kosukesuzuki 0:f20bcf1efbc2 155 memset(gps_data,'\0',256);
kosukesuzuki 0:f20bcf1efbc2 156 }else if (gps_data[cnt_gps]=='\r'){ //4
kosukesuzuki 0:f20bcf1efbc2 157 float world_time, lon_east, lat_north;
kosukesuzuki 0:f20bcf1efbc2 158 int rlock, sat_num;
kosukesuzuki 0:f20bcf1efbc2 159 char lat,lon;
kosukesuzuki 0:f20bcf1efbc2 160 if(sscanf(gps_data,"GPGGA,%f,%f,%c,%f,%c,%d,%d",&world_time,&lat_north,&lat,&lon_east,&lon,&rlock,&sat_num)>=1){ //5
kosukesuzuki 0:f20bcf1efbc2 161 if(rlock==1){ //6
kosukesuzuki 0:f20bcf1efbc2 162 lat_north=_DMS2DEG(lat_north);
kosukesuzuki 0:f20bcf1efbc2 163 lon_east=_DMS2DEG(lon_east);
kosukesuzuki 0:f20bcf1efbc2 164
kosukesuzuki 0:f20bcf1efbc2 165 //printf("Lat:%f,Lon:%f\r\ntime:%f,sat_num:%d\r\n",lat_north,lon_east,world_time,sat_num);
kosukesuzuki 0:f20bcf1efbc2 166
kosukesuzuki 0:f20bcf1efbc2 167 }else{ //6
kosukesuzuki 0:f20bcf1efbc2 168 //printf("%s\r\n",gps_data);
kosukesuzuki 0:f20bcf1efbc2 169 } //6
kosukesuzuki 0:f20bcf1efbc2 170 } //5
kosukesuzuki 0:f20bcf1efbc2 171 }else{ //4
kosukesuzuki 0:f20bcf1efbc2 172 cnt_gps++;
kosukesuzuki 0:f20bcf1efbc2 173 } //3
kosukesuzuki 0:f20bcf1efbc2 174 if(timer_log.read()>=30.0*60.0) timer_log.reset();
kosukesuzuki 0:f20bcf1efbc2 175 } //2
kosukesuzuki 1:bfd9df900c4f 176 */
kosukesuzuki 0:f20bcf1efbc2 177
kosukesuzuki 0:f20bcf1efbc2 178
kosukesuzuki 0:f20bcf1efbc2 179
kosukesuzuki 0:f20bcf1efbc2 180 //機体の放出後→データを取る
kosukesuzuki 0:f20bcf1efbc2 181 if(cmd1 == 'm'){ //3
kosukesuzuki 0:f20bcf1efbc2 182 pc.printf("start\r\n");
kosukesuzuki 0:f20bcf1efbc2 183 t.start();
kosukesuzuki 0:f20bcf1efbc2 184 cmd1 = 0;
kosukesuzuki 0:f20bcf1efbc2 185
kosukesuzuki 0:f20bcf1efbc2 186 while(1){ //4
kosukesuzuki 0:f20bcf1efbc2 187 //if (pc.readable()) xbee.putc(pc.getc());
kosukesuzuki 0:f20bcf1efbc2 188 if (xbee.readable()) pc.putc(xbee.getc());
kosukesuzuki 0:f20bcf1efbc2 189 wait_us(1);
kosukesuzuki 0:f20bcf1efbc2 190 char cmd2 = xbee.getc();
kosukesuzuki 0:f20bcf1efbc2 191
kosukesuzuki 0:f20bcf1efbc2 192 /***********************************************************/
kosukesuzuki 0:f20bcf1efbc2 193 //データ(気圧,GPS,地磁気)を取る。
kosukesuzuki 0:f20bcf1efbc2 194 //データの保存を10回行い, 保存する。
kosukesuzuki 0:f20bcf1efbc2 195
kosukesuzuki 0:f20bcf1efbc2 196
kosukesuzuki 0:f20bcf1efbc2 197 for(i=0;i<10;i++){ //データ10回とる //5
kosukesuzuki 1:bfd9df900c4f 198 /*
kosukesuzuki 0:f20bcf1efbc2 199 if(gps.readable()){ //6
kosukesuzuki 0:f20bcf1efbc2 200 gps_data[cnt_gps]=gps.getc();
kosukesuzuki 0:f20bcf1efbc2 201 if(gps_data[cnt_gps]=='$' || cnt_gps==256){ //7
kosukesuzuki 0:f20bcf1efbc2 202 cnt_gps=0;
kosukesuzuki 0:f20bcf1efbc2 203 memset(gps_data,'\0',256);
kosukesuzuki 0:f20bcf1efbc2 204 }else if (gps_data[cnt_gps]=='\r'){ //7
kosukesuzuki 0:f20bcf1efbc2 205
kosukesuzuki 0:f20bcf1efbc2 206 float world_time, lon_east, lat_north, rate, sea_level, g_h; //rate 水平精度低下率 sea_level アンテナ海抜高さ g_h ジオイド高さ
kosukesuzuki 0:f20bcf1efbc2 207 char lat,lon,sea,h;
kosukesuzuki 0:f20bcf1efbc2 208 int rlock, sat_num;
kosukesuzuki 0:f20bcf1efbc2 209 if(sscanf(gps_data,"GPGGA,%f,%f,%c,%f,%c,%d,%d,%f,%f,%c,%f,%c",&world_time,&lat_north,&lat,&lon_east,&lon,&rlock,&sat_num, &rate,&sea_level,&sea,&g_h,&h)>=1){ //8
kosukesuzuki 0:f20bcf1efbc2 210 if(rlock==1){ //9
kosukesuzuki 0:f20bcf1efbc2 211 lat_north=_DMS2DEG(lat_north);
kosukesuzuki 0:f20bcf1efbc2 212 lon_east=_DMS2DEG(lon_east);
kosukesuzuki 0:f20bcf1efbc2 213
kosukesuzuki 0:f20bcf1efbc2 214 //printf("Lat:%f,Lon:%f\r\ntime:%f,sat_num:%d g_h%f\r\n",lat_north,lon_east,world_time,sat_num,g_h);
kosukesuzuki 0:f20bcf1efbc2 215
kosukesuzuki 0:f20bcf1efbc2 216 dataLat[i] = lat_north;
kosukesuzuki 0:f20bcf1efbc2 217 dataLon[i] = lon_east;
kosukesuzuki 0:f20bcf1efbc2 218 dataH[i] = g_h;
kosukesuzuki 0:f20bcf1efbc2 219
kosukesuzuki 0:f20bcf1efbc2 220 }else{ //9
kosukesuzuki 0:f20bcf1efbc2 221 //printf("%s\r\n",gps_data);
kosukesuzuki 0:f20bcf1efbc2 222
kosukesuzuki 0:f20bcf1efbc2 223 dataLat[i] = 0;
kosukesuzuki 0:f20bcf1efbc2 224 dataLon[i] = 0;
kosukesuzuki 0:f20bcf1efbc2 225 dataH[i] = 0;
kosukesuzuki 0:f20bcf1efbc2 226
kosukesuzuki 0:f20bcf1efbc2 227
kosukesuzuki 0:f20bcf1efbc2 228 } //9
kosukesuzuki 0:f20bcf1efbc2 229 } //8
kosukesuzuki 0:f20bcf1efbc2 230 }else{ //7
kosukesuzuki 0:f20bcf1efbc2 231 cnt_gps++;
kosukesuzuki 0:f20bcf1efbc2 232 } //7
kosukesuzuki 0:f20bcf1efbc2 233 } //6
kosukesuzuki 0:f20bcf1efbc2 234
kosukesuzuki 0:f20bcf1efbc2 235 if(timer_log.read()>=30.0*60.0) timer_log.reset();
kosukesuzuki 0:f20bcf1efbc2 236
kosukesuzuki 1:bfd9df900c4f 237 */
kosukesuzuki 0:f20bcf1efbc2 238 //GPS
kosukesuzuki 0:f20bcf1efbc2 239 float pressure = ps.readPressureMillibars();
kosukesuzuki 0:f20bcf1efbc2 240 float altitude = ps.pressureToAltitudeMeters(pressure);
kosukesuzuki 0:f20bcf1efbc2 241 float temperature = ps.readTemperatureC();
kosukesuzuki 0:f20bcf1efbc2 242
kosukesuzuki 0:f20bcf1efbc2 243 dataPa[i] = pressure;
kosukesuzuki 0:f20bcf1efbc2 244 dataAl[i] = altitude;
kosukesuzuki 0:f20bcf1efbc2 245 dataTe[i] = temperature;
kosukesuzuki 0:f20bcf1efbc2 246
kosukesuzuki 0:f20bcf1efbc2 247
kosukesuzuki 0:f20bcf1efbc2 248 wait_us(dt);
kosukesuzuki 0:f20bcf1efbc2 249 } //5
kosukesuzuki 0:f20bcf1efbc2 250
kosukesuzuki 0:f20bcf1efbc2 251 //ここで保存と表示する
kosukesuzuki 0:f20bcf1efbc2 252 for(i=0;i<10;i++){ //5
kosukesuzuki 1:bfd9df900c4f 253 //xbee.printf("time = %f, Lat,Lon %f,%f gH = %f, Pa = %f, Al = %f, Te = %f\r\n",t.read(),dataLat[i],dataLon[i],dataH[i],dataPa[i],dataAl[i],dataTe[i]);
kosukesuzuki 1:bfd9df900c4f 254 xbee.printf("time = %f,Pa = %f, Al = %f, Te = %f\r\n",t.read(),dataPa[i],dataAl[i],dataTe[i]);
kosukesuzuki 0:f20bcf1efbc2 255 } //5
kosukesuzuki 0:f20bcf1efbc2 256
kosukesuzuki 0:f20bcf1efbc2 257
kosukesuzuki 0:f20bcf1efbc2 258
kosukesuzuki 0:f20bcf1efbc2 259 /***********************************************************/
kosukesuzuki 0:f20bcf1efbc2 260
kosukesuzuki 0:f20bcf1efbc2 261 //機体の着陸後→プログラムを終わらす。
kosukesuzuki 0:f20bcf1efbc2 262 if(cmd2 == 'n'){ //5
kosukesuzuki 0:f20bcf1efbc2 263 pc.printf("end\r\n");
kosukesuzuki 0:f20bcf1efbc2 264 xbee.printf("ned\r\n");
kosukesuzuki 0:f20bcf1efbc2 265 pc.printf("time = %f",t.read());
kosukesuzuki 0:f20bcf1efbc2 266 xbee.printf("time = %f",t.read());
kosukesuzuki 0:f20bcf1efbc2 267 t.stop();
kosukesuzuki 0:f20bcf1efbc2 268 cmd2 = 0;
kosukesuzuki 0:f20bcf1efbc2 269 return 0;
kosukesuzuki 0:f20bcf1efbc2 270 } //5
kosukesuzuki 0:f20bcf1efbc2 271
kosukesuzuki 0:f20bcf1efbc2 272 } //4
kosukesuzuki 0:f20bcf1efbc2 273
kosukesuzuki 0:f20bcf1efbc2 274
kosukesuzuki 0:f20bcf1efbc2 275 } //3
kosukesuzuki 0:f20bcf1efbc2 276 } //2
kosukesuzuki 0:f20bcf1efbc2 277 } //1
kosukesuzuki 0:f20bcf1efbc2 278
kosukesuzuki 1:bfd9df900c4f 279 /*
kosukesuzuki 0:f20bcf1efbc2 280 float _DMS2DEG(float raw_data){//GPSで使用 //1
kosukesuzuki 0:f20bcf1efbc2 281 float bb = raw_data/100;
kosukesuzuki 0:f20bcf1efbc2 282 int d=(int)bb;
kosukesuzuki 0:f20bcf1efbc2 283 float m=(raw_data-(float)d*100);
kosukesuzuki 0:f20bcf1efbc2 284 return (float)d+m/60;
kosukesuzuki 1:bfd9df900c4f 285 } //1
kosukesuzuki 1:bfd9df900c4f 286
kosukesuzuki 1:bfd9df900c4f 287 */