[[2005/B4]] #contents * ロボコンプログラム1(走行用) [#l5d9a591] int count2;//箱仕分け用カウント変数 #define light_m 46//ライントレース用白、黒判断基準値 void first(){//箱をつかむまでの最初の動き OnFwd(OUT_A+OUT_C);//箱まで前進 Wait(50); Off(OUT_A+OUT_C); OnRev(OUT_B);//箱をつかむ Wait(65); Off(OUT_B); Wait(100); OnRev(OUT_A+OUT_C);//ラインをつかむ Wait(65); Off(OUT_A+OUT_C); OnFwd(OUT_C); OnRev(OUT_A); Wait(25); while((SENSOR_1 > light_m)){ OnFwd(OUT_A+OUT_C); } } void trace(){ライントレース用プログラム int count1=0; while(true) { if ((SENSOR_1 > light_m) && (SENSOR_3 < light_m))//右のセンサー黒 { OnFwd(OUT_A);//左回転 Off(OUT_C); Wait(2); } if ((SENSOR_1 < light_m) && (SENSOR_3 > light_m))//左のセンサー黒 { OnFwd(OUT_C);//右回転 Off(OUT_A); Wait(2); } if ((SENSOR_1 < light_m) && (SENSOR_3 < light_m))//クロスしてる部分を感知したら(両方黒) { PlaySound(SOUND_CLICK); OnFwd(OUT_A+OUT_C);//少しだけ前進してラインをとばす Wait(20); count1++;//何個クロスを通過したかのカウント } if(count1==count2){//色別の箱の所まで行ったら箱を落とすため break;//ライントレースをやめる。 } } } void trace_r(){//戻る時のライントレース用関数 int count1=0; while(true) { if ((SENSOR_1 > light_m) && (SENSOR_3 < light_m)) { OnFwd(OUT_A); Off(OUT_C); Wait(2); } if ((SENSOR_1 < light_m) && (SENSOR_3 > light_m)) { OnFwd(OUT_C); Off(OUT_A); Wait(2); } if ((SENSOR_1 < light_m) && (SENSOR_3 < light_m)) { PlaySound(SOUND_CLICK); OnFwd(OUT_A+OUT_C); Wait(20); count1++; } if(count1==count2){//箱の前まで行ったら PlaySound(SOUND_UP); /*OnFwd(OUT_A+OUT_C); Wait(10);*/ OnRev(OUT_C+OUT_A);//方向転換 Wait(10); while((SENSOR_1 > light_m)){ OnFwd(OUT_A); OnRev(OUT_C); } break;//ループ抜け } } OnFwd(OUT_C);//初期配置に戻る OnRev(OUT_A); Wait(40); while((SENSOR_3 > light_m)){ OnFwd(OUT_C); OnRev(OUT_A); } } task main() { SetSensor(SENSOR_1,SENSOR_LIGHT);//センサーセット SetSensor(SENSOR_2,SENSOR_LIGHT);//センサーセット SetSensor(SENSOR_3,SENSOR_LIGHT);//センサーセット int count_white=2,count_green=1,count_black=3,count3=0;//色を分けるための変数 //repeat(3){3回行う(ほんとはやりたかった… first();//初期動作(箱をつかむ) if((SENSOR_2>=50)&&(SENSOR_2<=60)){//white(各パターン count2=count_white;//カウントの変更 trace(); } if((SENSOR_2>=30)&&(SENSOR_2<=40)){//black count2=count_black; trace(); } if((SENSOR_2>=40)&&(SENSOR_2<=50)){//green count2=count_green; trace(); } OnFwd(OUT_A);//箱に近づく命令 OnRev(OUT_C); Wait(20); OnFwd(OUT_A+OUT_C); Wait(110); Off(OUT_A+OUT_C); Wait(100); OnFwd(OUT_B);//box out Wait(65); Wait(30); OnRev(OUT_B); Wait(70); Off(OUT_B);//arm stop OnRev(OUT_A+OUT_C);//back Wait(100); while((SENSOR_1 > light_m)){//U-turn OnFwd(OUT_A); OnRev(OUT_C); } OnFwd(OUT_A); OnRev(OUT_C); Wait(40); while((SENSOR_1 > light_m)){ OnFwd(OUT_A); OnRev(OUT_C); } Off(OUT_A+OUT_C);//終了 } -一個しか運べなかった… -でも色の識別もできてたのでもう少しやれば三つくらいは運べたかも -今回は箱を入れてU-ターンするとこまでしかできなかったので残念でした。 -ライントレースももう少し静かにできるよう工夫した方がよかった。 -コメントどうぞ #comment *ロボコンプログラム(アーム用) [#r5bc8cfe] task main() { SetSensor(SENSOR_1,SENSOR_TOUCH);//センサーセット while(true) { until(SENSOR_1 == 1);//センサが感知するまで待つ Wait(150);//箱をつかんだ後に上げたいので待つ。 if(SENSOR_1 == 1)//箱に触れたら { OnFwd(OUT_A+OUT_C);//アーム持ち上げ Wait(60); Off(OUT_A+OUT_C); Wait(300);//アームを持ち上げてる最中にタッチセンサーが0になる事があったのでWait until(SENSOR_1 == 0);//箱を離すまでまつ } if(SENSOR_1 == 0)//箱を落としたら { OnRev(OUT_A+OUT_C);//アームを下げる Wait(10); Float(OUT_A+OUT_C); until(SENSOR_1 == 1);//次の箱をつかむまで待つ } } } -タッチセンサーの感度に苦しめられた。 -ここのプログラムが今回のロボの特徴的な部分だとおもいます。 -こっちは比較的簡単にできました。 -アームを下げるときにFloatを使う事により自重でおりていくのでそこが良い感じだったと思います。 -コメントどうぞ #comment