Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: ADXL345_I2C mbed
main.cpp
00001 #include "mbed.h" 00002 #include "ADXL345_I2C.h" 00003 00004 //センサの校正値(要変更) 00005 #define SENSOR1X 4.756 00006 #define SENSOR1Y 2.557 00007 #define SENSOR1Z -25.941 00008 00009 #define SENSOR2X 9.133 00010 #define SENSOR2Y 1.428 00011 #define SENSOR2Z -32.222 00012 00013 //LED1からLED4をled1からled4に割り当てる。 00014 DigitalOut led1(LED1); 00015 DigitalOut led2(LED2); 00016 DigitalOut led3(LED3); 00017 DigitalOut led4(LED4); 00018 00019 DigitalOut buzzer(p18); //電子ブザー用アナorデジ出力 00020 00021 DigitalIn startsw(p21); 00022 00023 //ADXL345 accelerometer(p5, p6, p7, p8); 00024 ADXL345_I2C accelerometer1(p9, p10); 00025 ADXL345_I2C accelerometer2(p28, p27); 00026 Serial pc(USBTX, USBRX); 00027 LocalFileSystem local("local"); 00028 00029 Timer timer; 00030 00031 int SW(); //スタートスイッチ用関数,押して離したらスタート 00032 int Buzzer(int buzvar = 1); //電子ブザーを鳴らす関数 00033 00034 int main(){ 00035 00036 int ledv=1; //led value初期化 00037 /*int data1[3] = {0, 0, 0}; 00038 int data2[3] = {0, 0, 0};*/ 00039 int data[2][3] = {}; 00040 double tempdata[2][3] = {}; 00041 double pfdata[2][3] = {}; 00042 double kousei[2][3] = {{SENSOR1X, SENSOR1Y, SENSOR1Z}, {SENSOR2X, SENSOR2Y, SENSOR2Z}}; 00043 const int n = 10; //ループ回数 00044 //time_t tnow; 00045 //char buf[32]; 00046 char filename[64]; 00047 FILE *fp, *fpname; 00048 int fpn = 0; 00049 00050 /* 00051 pc.printf("Starting ADXL345 test...\n"); 00052 pc.printf("Device1 ID is: 0x%02x\n", accelerometer1.getDevId()); 00053 pc.printf("Device2 ID is: 0x%02x\n", accelerometer2.getDevId()); 00054 */ 00055 00056 //Go into standby mode to configure the device. 00057 accelerometer1.setPowerControl(0x00); 00058 accelerometer2.setPowerControl(0x00); 00059 00060 //Full resolution, +/-16g, 4mg/LSB. 00061 accelerometer1.setDataFormatControl(0x0B); 00062 accelerometer2.setDataFormatControl(0x0B); 00063 00064 //3.2kHz data rate. 00065 accelerometer1.setDataRate(ADXL345_3200HZ); 00066 accelerometer2.setDataRate(ADXL345_3200HZ); 00067 00068 //Measurement mode. 00069 accelerometer1.setPowerControl(0x08); 00070 accelerometer2.setPowerControl(0x08); 00071 00072 wait(1); 00073 00074 Buzzer(3); 00075 00076 while(1){ 00077 00078 SW(); 00079 Buzzer(1); 00080 wait(1); 00081 timer.reset(); 00082 timer.start(); 00083 00084 /* 00085 /////////////////////////////////////////// 00086 while(1){ 00087 00088 for(int i = 0; i < 2; i++){ 00089 for(int j = 0; j < 3; j++){ 00090 tempdata[i][j] = 0; 00091 } 00092 } 00093 00094 wait(0.1-0.01*n); 00095 00096 for(int i = 0; i < n; i++){ 00097 accelerometer1.getOutput(data[0]); 00098 accelerometer2.getOutput(data[1]); 00099 00100 for(int j = 0; j < 2; j++){ 00101 for(int k = 0; k < 3; k++){ 00102 tempdata[j][k] += (int16_t)data[j][k]; 00103 } 00104 } 00105 wait_ms(10); 00106 } 00107 00108 for(int i = 0; i < 2; i++){ 00109 for(int j = 0; j < 3; j++){ 00110 pfdata[i][j] = tempdata[i][j] / n - kousei[i][j]; 00111 } 00112 } 00113 00114 pc.printf("(%.2f,%.2f,%.2f),(%.2f,%.2f,%.2f)\n", pfdata[0][0],pfdata[0][1],pfdata[0][2],pfdata[1][0],pfdata[1][1],pfdata[1][2]); 00115 00116 }*/ 00117 00118 //////////////////////////////////ここからファイル名の決定 00119 fpname = fopen("/local/fn.txt", "r"); 00120 if(fpname == NULL){ 00121 for(int i = 0; i < 5; i++){ 00122 led1 = !led1; 00123 led2 = !led2; 00124 led3 = !led3; 00125 wait(1); 00126 } 00127 return -1; 00128 } 00129 fscanf(fpname,"%d",&fpn); 00130 fclose(fpname); 00131 fpname = fopen("/local/fn.txt","w"); 00132 if(fpname == NULL){ 00133 for(int i = 0; i < 5; i++){ 00134 led1 = !led1; 00135 led2 = !led2; 00136 wait(1); 00137 } 00138 return -1; 00139 } 00140 fprintf(fpname,"%d",fpn+1); 00141 fclose(fpname); 00142 //////////////////////////////////////ここまでファイル名の決定 00143 /*tnow = time(NULL) + (60*60*9); 00144 strftime(buf,sizeof(buf),"%H%M%S", localtime(&tnow)); 00145 sprintf(filename,"/local/lg%s.csv",buf); 00146 strftime(buf,sizeof(buf),"%Y-%m-%d %H:%M:%S", localtime(&tnow));*/ 00147 /////////////////////////////////ここから出力ファイルを開く 00148 sprintf(filename,"/local/log%003d.csv",fpn); 00149 fp = fopen(filename,"w"); 00150 if(fp == NULL){ 00151 for(int i = 0; i < 5; i++){ 00152 led1 = !led1; 00153 led2 = !led2; 00154 led3 = !led3; 00155 led4 = !led4; 00156 wait(1); 00157 } 00158 return -1; 00159 } 00160 //fprintf(fp, "The time is %s\n", ctime(&tnow)); 00161 fprintf(fp, "time,,sensor1x,sensor1y,sensor1z,,sensor2x,sensor2y,sensor2z\n"); 00162 /*for(int m = 0; m < 10; m++){ //ここで周回数を決める*/ 00163 while(startsw == 0){ 00164 if(ledv>0x10)ledv=1; //kが0b00010000になったら0b00000001にする 00165 led1 = ledv & 0x01; 00166 led2 = ledv & 0x02; 00167 led3 = ledv & 0x04; 00168 led4 = ledv & 0x08; 00169 ledv=ledv<<1; //kの中を左に1つ移動(mbedのledを順番に点滅) 00170 00171 for(int i = 0; i < 2; i++){ //平均を取るための合計を格納する変数を初期化 00172 for(int j = 0; j < 3; j++){ 00173 tempdata[i][j] = 0; 00174 } 00175 } 00176 00177 wait(0.1-0.01*n); 00178 00179 //以下データの平均をとってファイル出力 00180 for(int i = 0; i < n; i++){ 00181 accelerometer1.getOutput(data[0]); 00182 accelerometer2.getOutput(data[1]); 00183 00184 for(int j = 0; j < 2; j++){ 00185 for(int k = 0; k < 3; k++){ 00186 tempdata[j][k] += (int16_t)data[j][k]; 00187 } 00188 } 00189 wait_ms(10); 00190 } 00191 00192 for(int i = 0; i < 2; i++){ 00193 for(int j = 0; j < 3; j++){ 00194 pfdata[i][j] = tempdata[i][j] / n - kousei[i][j]; 00195 } 00196 } 00197 00198 fprintf(fp, "%f,,%f,%f,%f,,%f,%f,%f\n",timer.read(),pfdata[0][0],pfdata[0][1],pfdata[0][2],pfdata[1][0],pfdata[1][1],pfdata[1][2]); 00199 } 00200 timer.stop(); 00201 Buzzer(5); 00202 fclose(fp); 00203 } 00204 00205 //////////////////////////////// 00206 /* 00207 fp = fopen("/local/log.csv","w"); 00208 for(int i = 0; i < 2000; i++){ 00209 00210 wait(0.5); 00211 00212 if(ledv>0x10)ledv=1; //kが0b00010000になったら0b00000001にする 00213 led1 = ledv & 0x01; 00214 led2 = ledv & 0x02; 00215 led3 = ledv & 0x04; 00216 led4 = ledv & 0x08; 00217 ledv=ledv<<1; //kの中を左に1つ移動 00218 00219 accelerometer1.getOutput(data1); 00220 accelerometer2.getOutput(data2); 00221 00222 fprintf(fp,"%i, %i, %i,,%i, %i, %i,,%f\n", (int16_t)data1[0], (int16_t)data1[1], (int16_t)data1[2], (int16_t)data2[0], (int16_t)data2[1], (int16_t)data2[2],timer.read()); 00223 00224 } 00225 fclose(fp); 00226 */ 00227 00228 /*while(1){ 00229 00230 wait(1); 00231 00232 accelerometer1.getOutput(data1); 00233 accelerometer2.getOutput(data2); 00234 00235 //13-bit, sign extended values. 00236 pc.printf("(%i, %i, %i),(%i, %i, %i)\n", (int16_t)data1[0], (int16_t)data1[1], (int16_t)data1[2], (int16_t)data2[0], (int16_t)data2[1], (int16_t)data2[2]); 00237 }*/ 00238 00239 } 00240 00241 00242 int SW(){ //スタートスイッチ用関数,押して離したらスタート 00243 int i = 0, j = 0; 00244 while(i < 3){ //チャタリング除去,15msにわたってスタートスイッチが押されていればbreak 00245 if(startsw == 1) i++; 00246 else i = 0; 00247 //DipLed(); 00248 wait_ms(5); 00249 } 00250 while(j < 3){ //上に同じ,スタートスイッチが離されたことを検知 00251 if(startsw == 0) j++; 00252 else j = 0; 00253 //DipLed(); 00254 wait_ms(5); 00255 } 00256 return 0; 00257 } 00258 00259 int Buzzer(int buzvar){ //電子ブザーを鳴らす関数 00260 switch (buzvar){ 00261 /**************エラーを知らせるbeep**************/ 00262 case -3: //error * - - 00263 buzzer = 1; wait(0.1); buzzer = 0; wait(0.1); 00264 buzzer = 1; wait(0.3); buzzer = 0; wait(0.3); 00265 buzzer = 1; wait(0.3); buzzer = 0; wait(0.3); 00266 break; 00267 case -2: //error * - - - 00268 buzzer = 1; wait(0.1); buzzer = 0; wait(0.1); 00269 buzzer = 1; wait(0.3); buzzer = 0; wait(0.3); 00270 buzzer = 1; wait(0.3); buzzer = 0; wait(0.3); 00271 buzzer = 1; wait(0.3); buzzer = 0; wait(0.3); 00272 break; 00273 case -1: //error * - - - - 00274 buzzer = 1; wait(0.1); buzzer = 0; wait(0.1); 00275 buzzer = 1; wait(0.3); buzzer = 0; wait(0.3); 00276 buzzer = 1; wait(0.3); buzzer = 0; wait(0.3); 00277 buzzer = 1; wait(0.3); buzzer = 0; wait(0.3); 00278 buzzer = 1; wait(0.3); buzzer = 0; wait(0.3); 00279 break; 00280 /**************エラーここまで**************/ 00281 case 0: //サウンドなし 00282 buzzer = 0; 00283 break; 00284 /**************状態を知らせるためのbeep**************/ 00285 case 1: // *(短) 00286 buzzer = 1; wait(0.1); buzzer = 0; 00287 break; 00288 case 2: // * * 00289 buzzer = 1; wait(0.1); buzzer = 0; wait(0.05); 00290 buzzer = 1; wait(0.1); buzzer = 0; 00291 break; 00292 case 3: // -(長) 00293 buzzer = 1; wait(0.3); buzzer = 0; 00294 break; 00295 case 4: // - - 00296 buzzer = 1; wait(0.3); buzzer = 0; wait(0.3); 00297 buzzer = 1; wait(0.3); buzzer = 0; 00298 break; 00299 case 5: // --- 00300 buzzer = 1; wait(0.9); buzzer = 0; 00301 break; 00302 case 6: // * * * * * * * * * * 00303 for(int i = 0; i < 3; i++){ 00304 for(int j = 0; j < 3; j++){ 00305 buzzer = 1; wait(0.1); buzzer = 0; wait(0.1); 00306 } 00307 wait(0.2); 00308 } 00309 buzzer = 1; wait(0.1); buzzer = 0; 00310 break; 00311 case 7: // **-* ** -* ** *** **** "finish" 00312 buzzer = 1; wait(0.1); buzzer = 0; wait(0.1); 00313 buzzer = 1; wait(0.1); buzzer = 0; wait(0.1); 00314 buzzer = 1; wait(0.3); buzzer = 0; wait(0.1); 00315 buzzer = 1; wait(0.1); buzzer = 0; wait(0.1); 00316 wait(0.2); 00317 buzzer = 1; wait(0.1); buzzer = 0; wait(0.1); 00318 buzzer = 1; wait(0.1); buzzer = 0; wait(0.1); 00319 wait(0.2); 00320 buzzer = 1; wait(0.3); buzzer = 0; wait(0.1); 00321 buzzer = 1; wait(0.1); buzzer = 0; wait(0.1); 00322 wait(0.2); 00323 buzzer = 1; wait(0.1); buzzer = 0; wait(0.1); 00324 buzzer = 1; wait(0.1); buzzer = 0; wait(0.1); 00325 wait(0.2); 00326 buzzer = 1; wait(0.1); buzzer = 0; wait(0.1); 00327 buzzer = 1; wait(0.1); buzzer = 0; wait(0.1); 00328 buzzer = 1; wait(0.1); buzzer = 0; wait(0.1); 00329 wait(0.2); 00330 buzzer = 1; wait(0.1); buzzer = 0; wait(0.1); 00331 buzzer = 1; wait(0.1); buzzer = 0; wait(0.1); 00332 buzzer = 1; wait(0.1); buzzer = 0; wait(0.1); 00333 buzzer = 1; wait(0.1); buzzer = 0; 00334 break; 00335 case 8: // *-*** -*- --* "オワリ" 00336 buzzer = 1; wait(0.1); buzzer = 0; wait(0.1); 00337 buzzer = 1; wait(0.3); buzzer = 0; wait(0.1); 00338 buzzer = 1; wait(0.1); buzzer = 0; wait(0.1); 00339 buzzer = 1; wait(0.1); buzzer = 0; wait(0.1); 00340 buzzer = 1; wait(0.1); buzzer = 0; wait(0.1); 00341 wait(0.2); 00342 buzzer = 1; wait(0.3); buzzer = 0; wait(0.1); 00343 buzzer = 1; wait(0.1); buzzer = 0; wait(0.1); 00344 buzzer = 1; wait(0.3); buzzer = 0; wait(0.1); 00345 wait(0.2); 00346 buzzer = 1; wait(0.3); buzzer = 0; wait(0.1); 00347 buzzer = 1; wait(0.3); buzzer = 0; wait(0.1); 00348 buzzer = 1; wait(0.1); buzzer = 0; 00349 break; 00350 case 9: //ケータイの着信音的な 00351 for(int i = 0; i < 20; i++){ 00352 buzzer = 1; wait(0.03); 00353 buzzer = 0; wait(0.03); 00354 } 00355 break; 00356 case 10: //9の短いバージョン 00357 for(int i = 0; i < 20; i++){ 00358 buzzer = 1; wait(0.02); 00359 buzzer = 0; wait(0.02); 00360 } 00361 break; 00362 /**************状態を知らせるためのbeepここまで**************/ 00363 default: //no sound 00364 buzzer = 0; 00365 break; 00366 } 00367 return 0; 00368 }
Generated on Tue Jul 12 2022 20:33:12 by
1.7.2