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.
main.cpp
00001 #include "mbed.h" 00002 00003 #define IR_TIME_NOTFOUND 833 /* 見つけられなかったと判断するまでの時間(単位:us) */ 00004 #define IR_COUNTMAX 487 /*最大パルス幅 パルスの存在しうる最大時間は487us*/ 00005 #define ALL_IR 8 00006 00007 Serial pc(USBTX, USBRX); // tx, rx 00008 00009 Timer timer_ir; /* 赤外線用タイマー */ 00010 00011 BusOut myleds(p18, p17, p16, p15, p14, p13, p12, p11); //出力用ポート 00012 00013 BusOut mbedleds(LED4,LED3,LED2,LED1); 00014 00015 /* 赤外線センサに使うpinを配列に格納 */ 00016 PinName ir_num[ALL_IR] = { 00017 p19, 00018 p20, 00019 p25, 00020 p26, 00021 p27, 00022 p28 00023 }; 00024 00025 DigitalIn sensor_ir(p30); 00026 00027 unsigned int moving_ave(unsigned int data) 00028 { 00029 static unsigned int tmp[14] = {0}; 00030 static unsigned int sum = 0; 00031 uint8_t i; 00032 uint8_t count; 00033 00034 sum -= tmp[13]; 00035 sum += data; 00036 tmp[13] = tmp[12]; 00037 tmp[12] = tmp[11]; 00038 tmp[11] = tmp[10]; 00039 tmp[10] = tmp[9]; 00040 tmp[9] = tmp[8]; 00041 tmp[8] = tmp[7]; 00042 tmp[7] = tmp[6]; 00043 tmp[6] = tmp[5]; 00044 tmp[5] = tmp[4]; 00045 tmp[4] = tmp[3]; 00046 tmp[3] = tmp[2]; 00047 tmp[2] = tmp[1]; 00048 tmp[1] = tmp[0]; 00049 tmp[0] = data; 00050 00051 return sum/10; 00052 } 00053 00054 int main () { 00055 unsigned int active_ir = 0; /* 今回更新する赤外線の番号 */ 00056 unsigned int memory_ir = 0; /*赤外線時間カウンタ*/ 00057 unsigned int flag_ir = 0; 00058 00059 for(;;){ 00060 flag_ir = 1; 00061 00062 //DigitalIn sensor_ir(ir_num[active_ir]); /* 今回更新する赤外線の個体を呼び出す */ 00063 00064 timer_ir.start(); /* タイマー起動 */ 00065 00066 if(sensor_ir){ /* もし立ち上がっていたら */ 00067 while(sensor_ir){ /* 立ち下がるまで待つ */ 00068 if(timer_ir.read_us() >= IR_TIME_NOTFOUND){ 00069 flag_ir = 0; 00070 break; /* 立ち上がっている時間が指定時間越えたらブレイク */ 00071 } 00072 } 00073 } 00074 00075 timer_ir.stop(); /* タイマー停止 */ 00076 timer_ir.reset(); /* タイマーリセット */ 00077 00078 /*ボールが指定時間内に見つかっていたら*/ 00079 if(flag_ir){ 00080 timer_ir.start(); /* タイマー起動 */ 00081 00082 while(!(sensor_ir)){ /* 立ち上がるまで待つ */ 00083 if(timer_ir.read_us() >= IR_TIME_NOTFOUND){ 00084 break; /* 立ち上がっている時間が指定時間越えたらブレイク */ 00085 } 00086 } 00087 00088 memory_ir = timer_ir.read_us(); 00089 00090 while(1){ 00091 00092 unsigned int counter_noise; 00093 00094 if(!(sensor_ir)){ 00095 myleds = moving_ave( (timer_ir.read_us()-memory_ir)/10 ); /* パルス幅を記録 */ 00096 //ir_width[active_ir] = timer_ir.read_us()-memory_ir; /* パルス幅を記録 */ 00097 //myleds = (timer_ir.read_us()-memory_ir)/10; 00098 00099 myleds = 0xFF; 00100 00101 pc.printf("%d\n",moving_ave( (timer_ir.read_us()-memory_ir)/10 )); 00102 00103 wait(0.01); 00104 break; 00105 }else{ 00106 /*ノイズ対策(ノイズで一瞬だけ立ち上がる可能性があるから)*/ 00107 //counter_noise = timer_ir.read_us(); /* 経過時間を保存 */ 00108 //while(timer_ir.read_us()-counter_noise <= 6){}; /* 6us間待つ */ 00109 //if(!(sensor_ir)){ /* もし立ち下がっていたら */ 00110 // flag_ir = 0; //iminasi 00111 00112 // timer_ir.stop(); /* タイマー停止 */ 00113 // timer_ir.reset(); /* タイマーリセット */ 00114 00115 // break; 00116 //} 00117 } 00118 } 00119 }else{ 00120 /*ボールが見つかっていない場合*/ 00121 //ir_width[active_ir] = 0; 00122 myleds = 0x00; /* パルス幅を記録 */ 00123 } 00124 timer_ir.stop(); /* タイマー停止 */ 00125 timer_ir.reset(); /* タイマーリセット */ 00126 00127 memory_ir = 0; 00128 00129 /*active_ir++; 次の赤外線センサへ(読み取る赤外線センサを順番に回す) 00130 if( active_ir >= NUM_IR ){ 00131 active_ir = 0; 6個全ての赤外線センサをまわったら一番初めに戻る 00132 }*/ 00133 } 00134 }
Generated on Tue Jul 12 2022 20:13:48 by
1.7.2