[[2014a/Member]] 目次 #contents * 課題の説明 [#mffb653f] 詳しい説明は[[2014a/Mission1]]を参照 写真の入れかた例え:&ref(2014a/Member/mame/Mission1/sample2-small.jpg.30%); * メンバー [#j0ee8e63] mame dai * ロボット本体 [#g0b2bc6e] ** ライトセンサー [#jf97ef47] ** ドライブベース [#ta82ecff] ** アーム [#qa948bf2] * 課題 [#ff560aa8] * プログラム [#w9871f04] ** プログラムの概要 [#v140454d] #define SPEED_HIGH 40 #define SPEED_MEDIUM 30 #define SPEED_LOW 25 #define SPEED_ZERO 0 #define TURN_COUNT_MAX 300 #define GO_COUNT_MAX 150 #define Catch OnFwd(OUT_A,70);Wait(700);Off(OUT_A); #define shoot OnRev(OUT_B,100);Wait(1000);Off(OUT_B); #define Catch OnFwd(OUT_B,70);Wait(700);Off(OUT_B); #define go_forward OnFwd(OUT_AC,50); void On(int leftSpeed, int rightSpeed){ if(leftSpeed > 0){ OnFwd(OUT_C, leftSpeed); }else{ OnRev(OUT_C, -leftSpeed); } if(rightSpeed > 0){ OnFwd(OUT_A, rightSpeed); }else{ OnRev(OUT_A, -rightSpeed); } } void GoForward(){ On(SPEED_HIGH, SPEED_HIGH); } void GoLeft(){ On(SPEED_ZERO, SPEED_MEDIUM); } void GoRight(){ On(SPEED_MEDIUM, SPEED_ZERO); } void TurnLeft(){ On(-SPEED_LOW, SPEED_LOW); } void TurnRight(){ On(SPEED_LOW, -SPEED_LOW); } void Back(){ On(-SPEED_HIGH, -SPEED_HIGH); } void BackLeft(){ On(SPEED_ZERO, -SPEED_MEDIUM); } void BackRight(){ On(-SPEED_MEDIUM, SPEED_ZERO); } bool Light(){ if(SENSOR_1 < 28){ return 0; }else if(SENSOR_1 < 35){ return 1; }else if(SENSOR_1 < 40){ return 2; }else if(SENSOR_1 < 45){ return 3; }else{ return 4; } } task main() { {SetSensorLowspeed(S4); go_forward; if(SensorUS(S4) <=8) { Catch;Off(OUT_BC); } } { int turnCount = 0; int goCount = 0; int nCorner = 0; SetSensorLight(S1); while(true){ Wait(1); switch(Light()){ case 0: TurnLeft(); if(turnCount < 0 || goCount < 0){ turnCount = 0; goCount = 0; } turnCount++; break; case 1: GoLeft(); if(turnCount < 0 || goCount < 0){ turnCount = 0; goCount = 0; } goCount++; break; case 2: GoForward(); break; case 3: GoRight(); if(turnCount > 0 || goCount > 0){ turnCount = 0; goCount = 0; } goCount++; break; case 4: TurnRight(); if(turnCount > 0 || goCount > 0){ turnCount = 0; goCount = 0; } turnCount++; break; break; } if(turnCount > TURN_COUNT_MAX && goCount < GO_COUNT_MAX){ PlayTone(440, 100); switch(nCorner++){ case 0: case 1: case 3: TurnRight(); Wait(turnCount * 3); Off(OUT_AC); Wait(100); GoForward(); Wait(100); break; case 4:OnRev(OUT_A,100);Wait(1000);Off(OUT_B); } turnCount = 0; goCount = 0; } } } } ** ライントレースのプログラム [#r829ca55] ** ボールをつかむプログラム [#gad1054c] ** ボールを放つ(シュートする)プログラム [#vc7dbfbf] task main() { OnFwd(OUT_BC); } ** 反省と感想 [#a4021e1b] 難しかった。