[[2014b/MemberOnly/進行状況]]
*課題 [#mff4bbfd]
#ref(./robotics-mission1-7.jpg,100%)
*ロボット本体 [#q78dcdc0]
写真を撮ってないため、載せられる画像はない。ロボットはライントレース機能だけあれば十分なので、基本となる走るロボットに光センサーをとりつけたものである。
*プログラム [#k2ef213d]
次のように定義する
 #define THRESHOLD 51
 #define SPEED_H 33
 #define SPEED_L 22 
 #define OnRL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd(OUT_C,speedL);
 #define go_forward OnRL(SPEED_H, SPEED_H);
 #define turn_left1 onRL(SPEED_L, -SPEED_L); // 左旋回
 #define turn_left0 onRL(SPEED_L, 0); // 左折
 #define turn_right0 onRL(0, SPEED_L); // 右折
 #define turn_right1 OnRL(-SPEED_L, SPEED_L); // 右旋回
 #define STEP 1 // 1回の判断で動作させる時間
 #define nMAX 300 // 通常のカーブとして許容できる繰り返しの最大値 (調整する)
 #define short_break Off(OUT_BC); Wait(1000); // 小休止
 #define CROSS_TIME 200 // 交差点通過にかかる時間
 #define cross_line OnRL(SPEED_L,SPEED_L);Wait(CROSS_TIME);short_break;
 
ライントレース時のプログラム
 task main()
 {
 SetSensorLight(S3);
 int nOnline=0; // 続けて黒になった回数 (カウンタ)
 while (true) {
 /* 黒を続けてnMAX回繰り返さない間、通常のライントレースをする */
 while (nOnline < nMAX) {
 if (SENSOR_3 < THRESHOLD-15) {
 turn_left1;
 nOnline++; // カウンタを増やす
 } else {
 if (SENSOR_3 < THRESHOLD-7) {
 turn_left0;
 } else if (SENSOR_3 < THRESHOLD+7) {
 go_forward;
 } else if (SENSOR_3 < THRESHOLD+15) {turn_right0;
 } else {
 turn_right1;
 }
 nOnline=0; // カウンタをリセット
 }
 Wait(STEP);
 }




トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS