2019a/Member/Kasai/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2019a/Member]]
目次
#contents
*課題2 [#ze94ad70]
下の図のようなコースを各チームで作成し、「ミッション」を...
黒線の幅は20mmでなるべく均等な濃さにすること。 ゴールには...
&ref(2019a/Member/Kasai/Mission2/map.png,50%);
**コース [#s8de8959]
A地点から出発 → M → K(直進) → L(ピンポン玉をつかむ) → K(...
交差点では1秒間停止し、丁字路では直角方向に進入する時のみ...
&ref(2019a/Member/Kasai/Mission2/map_line.png,50%);
*ロボットについて [#d1081fe1]
**ロボットの全体 [#c1e673a9]
今回は,ロボティクスの最初の授業で作ったロボットを改良し...
&ref(2019a/Member/Kasai/Mission2/robo_all.jpg,50%);
**胴体 [#xc23c187]
ボールを掴む部分の取り付けを考慮し,バッテリーの位置を後...
&ref(2019a/Member/Kasai/Mission2/robo_honntai.jpg,50%);
**光センサー [#sbc2b3bb]
小回りが利くようにできるだけロボットの車軸に近づけて作っ...
&ref(2019a/Member/Kasai/Mission2/senser.jpg,50%);
&ref(2019a/Member/Kasai/Mission2/senser_posi_new.jpg,50%);
**つかむ部分 [#j0244368]
&ref(2019a/Member/Kasai/Mission2/arm.jpg,50%);&ref(2019a/...
横から挟む機構にした.
?方向に回すとアームが開き,?方向の回すとアームが閉じる.
*プログラムについて [#xaeb4206]
**ライントレース [#eec3449e]
まず,黒い線を追従するライントレースのプログラミングを作...
「完全に真っ白」,「白と境目の間」,「境目」,「黒と境目...
「完全に黒」の5つの部分に色を分けて光の値を測った.
それらの値は以下の図のようになった.
&ref(2019a/Member/Kasai/Mission2/light_number.png,50%);
プログラミングでは以下のように定義する.
#define black 20
#define white 50
#define lightgray 40
#define darkgray 28
#define center 35
また,トレース時の動作もそれぞれ定義しておく.
#define turn_right OnFwd(OUT_C,25);OnRev(OUT_B,15);//右折
#define turn_left OnFwd(OUT_B,25);OnRev(OUT_C,15);//左折
#define rotate_right OnFwd(OUT_C,20);OnRev(OUT_B,20);//...
#define rotate_left OnFwd(OUT_B,20);OnRev(OUT_C,20);//左...
#define go_straight OnFwd(OUT_BC,20);//出力20の直進
#define go_straight2 OnFwd(OUT_BC,15);//出力15の直進
**サブルーチン [#yc4e5aff]
***左側のライントレース [#g13f81db]
sub followline_L(int stop_time)
{
long t0=CurrentTick();
while(CurrentTick()-t0<stop_time){ //現在の時刻が一...
if(SENSOR_1<black){ //センサーが黒の時
rotate_left; //左旋回
}else if(SENSOR_1<darkgray){ //センサーが黒灰...
turn_left; //左折
}else if(SENSOR_1>lightgray){ //センサーが白灰...
turn_right; //右折
t0=CurrentTick(); //時間をリセット
}else if(SENSOR_1<35){ //明るさ35以下で
go_straight; //直進
t0=CurrentTick(); //時間をリセット
}else{ //それ以外は
rotate_right; //右旋回
t0=CurrentTick(); //時間をリセット
}
}
Off(OUT_BC); //時刻が一定の値を超えると停止
Wait(1000); //1秒間停止
}
***右側のライントレース [#p36e96c9]
sub followline_R(int stop_time)
{
long t0=CurrentTick();
while(CurrentTick()-t0<stop_time){ //現在の時刻が一...
if(SENSOR_1<black){ //センサーが黒の時
rotate_right; //右旋回
}else if(SENSOR_1<darkgray){ //センサーが黒灰...
turn_right; //右折
}else if(SENSOR_1>lightgray){ //センサーが白灰...
turn_left; //左折
t0=CurrentTick(); //時間をリセット
}else if(SENSOR_1<35){ //センサーが35以...
go_straight; //直進
t0=CurrentTick(); //時間をリセット
}else{ //それ以外は
rotate_left; //左旋回
t0=CurrentTick(); //時間をリセット
}
}
Off(OUT_BC); //一定の時間を超えると停止
Wait(1000); //一秒間停止
}
***J地点でのT字路まで右側をトレースするサブルーチン [#n8f...
sub followline_R2(int stop_time)
{
long t0=CurrentTick();
while(CurrentTick()-t0<stop_time){ //時刻がある一...
if(SENSOR_1<black){ //黒なら
rotate_right; //右旋回
t0=CurrentTick(); //時間をリセット
}else if(SENSOR_1<darkgray){ //灰黒色なら
turn_right; //右折
t0=CurrentTick(); //時間をリセット
}else if(SENSOR_1>lightgray){ //灰白色なら
turn_left; //左折
}else if(SENSOR_1<35){ //明るさ35以下で
go_straight2; //ゆっくり直進
t0=CurrentTick(); //時間をリセット
}else{ //それ以外なら
rotate_left; //左旋回
}
}
Off(OUT_BC); //停止
Wait(2000); //2秒間停止
}
***交差点横断 [#dea5769a]
-直進
黒灰(28)より小さい値を検知している時は直進し,
黒灰(28)より大きい値を検知したら止まる.→黒い線上では直進
sub Blackto_White()
{
while(SENSOR_1<darkgray){
OnFwd(OUT_BC,15);
}
Off(OUT_BC);
}
-右旋回
白灰(40)より小さい値を検知している時は右折し,
白灰(40)より大きい値を検知したら止まる. →黒い線上では右...
sub Blackto_White_R()
{
while(SENSOR_1<lightgray){
OnFwd(OUT_C,20);
OnRev(OUT_B,20);
}
Off(OUT_BC);
}
-左旋回
白灰(40)より小さい値を検知している時は左折し,
白灰(40)より大きい値を検知したら止まる.→黒い線上では左旋回
sub Blackto_White_L()
{
while(SENSOR_1<lightgray){
OnFwd(OUT_B,20);
OnRev(OUT_C,20);
}
Off(OUT_BC);
}
**交差点認識 [#x6b6474f]
ライントレースをしている際,交差点にたどり着いてもそのま...
***左側トレースの交差点認識 [#l9128f0d]
&ref(2019a/Member/Kasai/Mission2/left_trace.png,50%);
左側のライントレースの場合,「黒」と「黒灰」の?と?の動作...
sub followline_L(int stop_time)
{
long t0=CurrentTick();
while(CurrentTick()-t0<stop_time){ //stop_timeにい...
if(SENSOR_1<black){ //blackすなわち2...
rotate_left; //この動作が連続...
}else if(SENSOR_1<darkgray){ //darkgrayすなわ...
turn_left; //この動作が連続...
}else if(SENSOR_1>lightdark){ //lightdrayすな...
turn_right; //この動作中はラ...
t0=CurrentTick();
}else if(SENSOR_1<center){ //centerすなわち...
go_straight; //この動作中はラ...
t0=CurrentTick();
}else{ //whiteすなわち5...
rotate_right; //この動作中はラ...
t0=CurrentTick();
}
}
Off(OUT_BC);
Wait(1000);
}
***右側トレースの交差点認識 [#s4f7665d]
&ref(2019a/Member/Kasai/Mission2/right_trace.png,50%);
左側と同様に「黒」と「黒灰」の?と?の動作が連続で何秒間か...
sub followline_R(int stop_time)
{
long t0=CurrentTick();
while(CurrentTick()-t0<stop_time){ //stop_timeにい...
if(SENSOR_1<black){ //blackすなわち2...
rotate_right; //この動作が連...
}else if(SENSOR_1<darkgray){ //darkgrayすなわ...
turn_right; //この動作が連...
}else if(SENSOR_1>lightdark){ //lightdrayすな...
turn_left; //この動作中は...
t0=CurrentTick();
}else if(SENSOR_1<center){ //centerすなわち...
go_straight; //この動作中は...
t0=CurrentTick();
}else{ //whiteすなわち5...
rotate_left; //この動作中は...
t0=CurrentTick();
}
}
Off(OUT_BC);
Wait(1000);
}
また,コースのKからLに向かい,Lで止まるプログラミングにお...
sub followline_R2(int stop_time)
{
long t0=CurrentTick();
while(CurrentTick()-t0<stop_time){ //stop_timeにい...
if(SENSOR_1<black){ //blackすなわ...
rotate_right; //この動作中は...
t0=CurrentTick();
}else if(SENSOR_1<darkgray){ //darkgrayすな...
turn_right; //この動作中は...
t0=CurrentTick();
}else if(SENSOR_1>lightdark){ //lightdrayす...
turn_left; //この動作が連...
}else if(SENSOR_1<center){ //centerすなわ...
go_straight2; //この動作中は...
t0=CurrentTick();
}else{ //whiteすなわ...
rotate_left; //この動作が連...
}
}
Off(OUT_BC);
Wait(2000);
}
**ボールのシュート [#i119d10d]
今回の課題では,コースの途中でボールを掴み,ゴール前で放...
-ボールを掴むプログラム
#define catch OnRev(OUT_A,25);Wait(500);Off(OUT_A);
-ボールを放すプログラム
#define release OnFwd(OUT_A,25);Wait(500);Off(OUT_A);
-ボールを押し出すプログラム
モーターの出力を大幅に上げてボールがまっすぐ進むようにし...
#define osidasi OnFwd(OUT_BC,100);Wait(100);Off(OUT_BC);
*コース上を動かす [#t492d4c1]
コースの上を動く流れは次のようになる.
&ref(2019a/Member/Kasai/Mission2/map_junnbann.png,50%);
**メインプログラム [#k8a404a7]
task main()
{
SetSensorLight(S1);
followline_R(150); //1
Blackto_White_L(); //2
followline_L(200); //3
Blackto_White_R(); //4
followline_R2(200); //5
catch; //ボールを掴む
turn; //左に旋回
followline_R(150); //6
Blackto_White(); //7
followline_L(150); //8
Blackto_White_L(); //9
followline_L(200); //10
Blackto_White(); //11
followline_L(200); //12
Blackto_White(); //13
followline_L(200); //14
Blackto_White(); //15
followline_R(150); //16
Blackto_White(); //17
followline_R(150); //18
release; //ボールを放す
osidasi; //ゴールする
}
**全体のプログラム [#d398e02c]
#define turn_right OnFwd(OUT_C,25);OnRev(OUT_B,15);
#define turn_left OnFwd(OUT_B,25);OnRev(OUT_C,15);
#define rotate_right OnFwd(OUT_C,20);OnRev(OUT_B,25);
#define rotate_left OnFwd(OUT_B,20);OnRev(OUT_C,25);
#define go_straight OnFwd(OUT_BC,20);
#define go_straight2 OnFwd(OUT_BC,15);
#define turn OnRev(OUT_C,25);OnFwd(OUT_B,25);Wait(1500);...
#define catch OnRev(OUT_A,25);Wait(500);Off(OUT_A);
#define release OnFwd(OUT_A,25);Wait(500);Off(OUT_A);
#define osidasi OnFwd(OUT_BC,100);Wait(100);Off(OUT_BC);
#define black 20
#define white 50
#define lightgray 40
#define darkgray 28
sub followline_L(int stop_time)
{
long t0=CurrentTick();
while(CurrentTick()-t0<stop_time){
if(SENSOR_1<black){
rotate_left;
}else if(SENSOR_1<darkgray){
turn_left;
}else if(SENSOR_1>lightgray){
turn_right;
t0=CurrentTick();
}else if(SENSOR_1<35){
go_straight;
t0=CurrentTick();
}else{
rotate_right;
t0=CurrentTick();
}
}
Off(OUT_BC);
Wait(1000);
}
sub followline_R(int stop_time)
{
long t0=CurrentTick();
while(CurrentTick()-t0<stop_time){
if(SENSOR_1<black){
rotate_right;
}else if(SENSOR_1<darkgray){
turn_right;
}else if(SENSOR_1>lightgray){
turn_left;
t0=CurrentTick();
}else if(SENSOR_1<35){
go_straight;
t0=CurrentTick();
}else{
rotate_left;
t0=CurrentTick();
}
}
Off(OUT_BC);
Wait(1000);
}
sub followline_R2(int stop_time)
{
long t0=CurrentTick();
while(CurrentTick()-t0<stop_time){
if(SENSOR_1<black){
rotate_right;
t0=CurrentTick();
}else if(SENSOR_1<darkgray){
turn_right;
t0=CurrentTick();
}else if(SENSOR_1>lightgray){
turn_left;
}else if(SENSOR_1<35){
go_straight2;
t0=CurrentTick();
}else{
rotate_left;
}
}
Off(OUT_BC);
Wait(2000);
}
sub Blackto_White()
{
while(SENSOR_1<darkgray){
OnFwd(OUT_BC,15);
}
Off(OUT_BC);
}
sub Blackto_White_R()
{
while(SENSOR_1<darkgray){
OnFwd(OUT_C,20);
OnRev(OUT_B,20);
}
Off(OUT_BC);
}
sub Blackto_White_L()
{
while(SENSOR_1<lightgray){
OnFwd(OUT_B,20);
OnRev(OUT_C,20);
}
Off(OUT_BC);
}
task main()
{
SetSensorLight(S1);
followline_R(150);
Blackto_White_L();
followline_L(200);
Blackto_White_R();
followline_R2(200);
catch;
turn;
followline_R(150);
Blackto_White();
followline_L(150);
Blackto_White_L();
followline_L(200);
Blackto_White();
followline_L(200);
Blackto_White();
followline_L(200);
Blackto_White();
followline_R(150);
Blackto_White();
followline_R(150);
release;
osidasi;
}
*まとめ [#b411665f]
今回もなんとか課題をクリアすることができた.
しかし,プログラミングの制作時には,プログラム自体は間違...
終了行:
[[2019a/Member]]
目次
#contents
*課題2 [#ze94ad70]
下の図のようなコースを各チームで作成し、「ミッション」を...
黒線の幅は20mmでなるべく均等な濃さにすること。 ゴールには...
&ref(2019a/Member/Kasai/Mission2/map.png,50%);
**コース [#s8de8959]
A地点から出発 → M → K(直進) → L(ピンポン玉をつかむ) → K(...
交差点では1秒間停止し、丁字路では直角方向に進入する時のみ...
&ref(2019a/Member/Kasai/Mission2/map_line.png,50%);
*ロボットについて [#d1081fe1]
**ロボットの全体 [#c1e673a9]
今回は,ロボティクスの最初の授業で作ったロボットを改良し...
&ref(2019a/Member/Kasai/Mission2/robo_all.jpg,50%);
**胴体 [#xc23c187]
ボールを掴む部分の取り付けを考慮し,バッテリーの位置を後...
&ref(2019a/Member/Kasai/Mission2/robo_honntai.jpg,50%);
**光センサー [#sbc2b3bb]
小回りが利くようにできるだけロボットの車軸に近づけて作っ...
&ref(2019a/Member/Kasai/Mission2/senser.jpg,50%);
&ref(2019a/Member/Kasai/Mission2/senser_posi_new.jpg,50%);
**つかむ部分 [#j0244368]
&ref(2019a/Member/Kasai/Mission2/arm.jpg,50%);&ref(2019a/...
横から挟む機構にした.
?方向に回すとアームが開き,?方向の回すとアームが閉じる.
*プログラムについて [#xaeb4206]
**ライントレース [#eec3449e]
まず,黒い線を追従するライントレースのプログラミングを作...
「完全に真っ白」,「白と境目の間」,「境目」,「黒と境目...
「完全に黒」の5つの部分に色を分けて光の値を測った.
それらの値は以下の図のようになった.
&ref(2019a/Member/Kasai/Mission2/light_number.png,50%);
プログラミングでは以下のように定義する.
#define black 20
#define white 50
#define lightgray 40
#define darkgray 28
#define center 35
また,トレース時の動作もそれぞれ定義しておく.
#define turn_right OnFwd(OUT_C,25);OnRev(OUT_B,15);//右折
#define turn_left OnFwd(OUT_B,25);OnRev(OUT_C,15);//左折
#define rotate_right OnFwd(OUT_C,20);OnRev(OUT_B,20);//...
#define rotate_left OnFwd(OUT_B,20);OnRev(OUT_C,20);//左...
#define go_straight OnFwd(OUT_BC,20);//出力20の直進
#define go_straight2 OnFwd(OUT_BC,15);//出力15の直進
**サブルーチン [#yc4e5aff]
***左側のライントレース [#g13f81db]
sub followline_L(int stop_time)
{
long t0=CurrentTick();
while(CurrentTick()-t0<stop_time){ //現在の時刻が一...
if(SENSOR_1<black){ //センサーが黒の時
rotate_left; //左旋回
}else if(SENSOR_1<darkgray){ //センサーが黒灰...
turn_left; //左折
}else if(SENSOR_1>lightgray){ //センサーが白灰...
turn_right; //右折
t0=CurrentTick(); //時間をリセット
}else if(SENSOR_1<35){ //明るさ35以下で
go_straight; //直進
t0=CurrentTick(); //時間をリセット
}else{ //それ以外は
rotate_right; //右旋回
t0=CurrentTick(); //時間をリセット
}
}
Off(OUT_BC); //時刻が一定の値を超えると停止
Wait(1000); //1秒間停止
}
***右側のライントレース [#p36e96c9]
sub followline_R(int stop_time)
{
long t0=CurrentTick();
while(CurrentTick()-t0<stop_time){ //現在の時刻が一...
if(SENSOR_1<black){ //センサーが黒の時
rotate_right; //右旋回
}else if(SENSOR_1<darkgray){ //センサーが黒灰...
turn_right; //右折
}else if(SENSOR_1>lightgray){ //センサーが白灰...
turn_left; //左折
t0=CurrentTick(); //時間をリセット
}else if(SENSOR_1<35){ //センサーが35以...
go_straight; //直進
t0=CurrentTick(); //時間をリセット
}else{ //それ以外は
rotate_left; //左旋回
t0=CurrentTick(); //時間をリセット
}
}
Off(OUT_BC); //一定の時間を超えると停止
Wait(1000); //一秒間停止
}
***J地点でのT字路まで右側をトレースするサブルーチン [#n8f...
sub followline_R2(int stop_time)
{
long t0=CurrentTick();
while(CurrentTick()-t0<stop_time){ //時刻がある一...
if(SENSOR_1<black){ //黒なら
rotate_right; //右旋回
t0=CurrentTick(); //時間をリセット
}else if(SENSOR_1<darkgray){ //灰黒色なら
turn_right; //右折
t0=CurrentTick(); //時間をリセット
}else if(SENSOR_1>lightgray){ //灰白色なら
turn_left; //左折
}else if(SENSOR_1<35){ //明るさ35以下で
go_straight2; //ゆっくり直進
t0=CurrentTick(); //時間をリセット
}else{ //それ以外なら
rotate_left; //左旋回
}
}
Off(OUT_BC); //停止
Wait(2000); //2秒間停止
}
***交差点横断 [#dea5769a]
-直進
黒灰(28)より小さい値を検知している時は直進し,
黒灰(28)より大きい値を検知したら止まる.→黒い線上では直進
sub Blackto_White()
{
while(SENSOR_1<darkgray){
OnFwd(OUT_BC,15);
}
Off(OUT_BC);
}
-右旋回
白灰(40)より小さい値を検知している時は右折し,
白灰(40)より大きい値を検知したら止まる. →黒い線上では右...
sub Blackto_White_R()
{
while(SENSOR_1<lightgray){
OnFwd(OUT_C,20);
OnRev(OUT_B,20);
}
Off(OUT_BC);
}
-左旋回
白灰(40)より小さい値を検知している時は左折し,
白灰(40)より大きい値を検知したら止まる.→黒い線上では左旋回
sub Blackto_White_L()
{
while(SENSOR_1<lightgray){
OnFwd(OUT_B,20);
OnRev(OUT_C,20);
}
Off(OUT_BC);
}
**交差点認識 [#x6b6474f]
ライントレースをしている際,交差点にたどり着いてもそのま...
***左側トレースの交差点認識 [#l9128f0d]
&ref(2019a/Member/Kasai/Mission2/left_trace.png,50%);
左側のライントレースの場合,「黒」と「黒灰」の?と?の動作...
sub followline_L(int stop_time)
{
long t0=CurrentTick();
while(CurrentTick()-t0<stop_time){ //stop_timeにい...
if(SENSOR_1<black){ //blackすなわち2...
rotate_left; //この動作が連続...
}else if(SENSOR_1<darkgray){ //darkgrayすなわ...
turn_left; //この動作が連続...
}else if(SENSOR_1>lightdark){ //lightdrayすな...
turn_right; //この動作中はラ...
t0=CurrentTick();
}else if(SENSOR_1<center){ //centerすなわち...
go_straight; //この動作中はラ...
t0=CurrentTick();
}else{ //whiteすなわち5...
rotate_right; //この動作中はラ...
t0=CurrentTick();
}
}
Off(OUT_BC);
Wait(1000);
}
***右側トレースの交差点認識 [#s4f7665d]
&ref(2019a/Member/Kasai/Mission2/right_trace.png,50%);
左側と同様に「黒」と「黒灰」の?と?の動作が連続で何秒間か...
sub followline_R(int stop_time)
{
long t0=CurrentTick();
while(CurrentTick()-t0<stop_time){ //stop_timeにい...
if(SENSOR_1<black){ //blackすなわち2...
rotate_right; //この動作が連...
}else if(SENSOR_1<darkgray){ //darkgrayすなわ...
turn_right; //この動作が連...
}else if(SENSOR_1>lightdark){ //lightdrayすな...
turn_left; //この動作中は...
t0=CurrentTick();
}else if(SENSOR_1<center){ //centerすなわち...
go_straight; //この動作中は...
t0=CurrentTick();
}else{ //whiteすなわち5...
rotate_left; //この動作中は...
t0=CurrentTick();
}
}
Off(OUT_BC);
Wait(1000);
}
また,コースのKからLに向かい,Lで止まるプログラミングにお...
sub followline_R2(int stop_time)
{
long t0=CurrentTick();
while(CurrentTick()-t0<stop_time){ //stop_timeにい...
if(SENSOR_1<black){ //blackすなわ...
rotate_right; //この動作中は...
t0=CurrentTick();
}else if(SENSOR_1<darkgray){ //darkgrayすな...
turn_right; //この動作中は...
t0=CurrentTick();
}else if(SENSOR_1>lightdark){ //lightdrayす...
turn_left; //この動作が連...
}else if(SENSOR_1<center){ //centerすなわ...
go_straight2; //この動作中は...
t0=CurrentTick();
}else{ //whiteすなわ...
rotate_left; //この動作が連...
}
}
Off(OUT_BC);
Wait(2000);
}
**ボールのシュート [#i119d10d]
今回の課題では,コースの途中でボールを掴み,ゴール前で放...
-ボールを掴むプログラム
#define catch OnRev(OUT_A,25);Wait(500);Off(OUT_A);
-ボールを放すプログラム
#define release OnFwd(OUT_A,25);Wait(500);Off(OUT_A);
-ボールを押し出すプログラム
モーターの出力を大幅に上げてボールがまっすぐ進むようにし...
#define osidasi OnFwd(OUT_BC,100);Wait(100);Off(OUT_BC);
*コース上を動かす [#t492d4c1]
コースの上を動く流れは次のようになる.
&ref(2019a/Member/Kasai/Mission2/map_junnbann.png,50%);
**メインプログラム [#k8a404a7]
task main()
{
SetSensorLight(S1);
followline_R(150); //1
Blackto_White_L(); //2
followline_L(200); //3
Blackto_White_R(); //4
followline_R2(200); //5
catch; //ボールを掴む
turn; //左に旋回
followline_R(150); //6
Blackto_White(); //7
followline_L(150); //8
Blackto_White_L(); //9
followline_L(200); //10
Blackto_White(); //11
followline_L(200); //12
Blackto_White(); //13
followline_L(200); //14
Blackto_White(); //15
followline_R(150); //16
Blackto_White(); //17
followline_R(150); //18
release; //ボールを放す
osidasi; //ゴールする
}
**全体のプログラム [#d398e02c]
#define turn_right OnFwd(OUT_C,25);OnRev(OUT_B,15);
#define turn_left OnFwd(OUT_B,25);OnRev(OUT_C,15);
#define rotate_right OnFwd(OUT_C,20);OnRev(OUT_B,25);
#define rotate_left OnFwd(OUT_B,20);OnRev(OUT_C,25);
#define go_straight OnFwd(OUT_BC,20);
#define go_straight2 OnFwd(OUT_BC,15);
#define turn OnRev(OUT_C,25);OnFwd(OUT_B,25);Wait(1500);...
#define catch OnRev(OUT_A,25);Wait(500);Off(OUT_A);
#define release OnFwd(OUT_A,25);Wait(500);Off(OUT_A);
#define osidasi OnFwd(OUT_BC,100);Wait(100);Off(OUT_BC);
#define black 20
#define white 50
#define lightgray 40
#define darkgray 28
sub followline_L(int stop_time)
{
long t0=CurrentTick();
while(CurrentTick()-t0<stop_time){
if(SENSOR_1<black){
rotate_left;
}else if(SENSOR_1<darkgray){
turn_left;
}else if(SENSOR_1>lightgray){
turn_right;
t0=CurrentTick();
}else if(SENSOR_1<35){
go_straight;
t0=CurrentTick();
}else{
rotate_right;
t0=CurrentTick();
}
}
Off(OUT_BC);
Wait(1000);
}
sub followline_R(int stop_time)
{
long t0=CurrentTick();
while(CurrentTick()-t0<stop_time){
if(SENSOR_1<black){
rotate_right;
}else if(SENSOR_1<darkgray){
turn_right;
}else if(SENSOR_1>lightgray){
turn_left;
t0=CurrentTick();
}else if(SENSOR_1<35){
go_straight;
t0=CurrentTick();
}else{
rotate_left;
t0=CurrentTick();
}
}
Off(OUT_BC);
Wait(1000);
}
sub followline_R2(int stop_time)
{
long t0=CurrentTick();
while(CurrentTick()-t0<stop_time){
if(SENSOR_1<black){
rotate_right;
t0=CurrentTick();
}else if(SENSOR_1<darkgray){
turn_right;
t0=CurrentTick();
}else if(SENSOR_1>lightgray){
turn_left;
}else if(SENSOR_1<35){
go_straight2;
t0=CurrentTick();
}else{
rotate_left;
}
}
Off(OUT_BC);
Wait(2000);
}
sub Blackto_White()
{
while(SENSOR_1<darkgray){
OnFwd(OUT_BC,15);
}
Off(OUT_BC);
}
sub Blackto_White_R()
{
while(SENSOR_1<darkgray){
OnFwd(OUT_C,20);
OnRev(OUT_B,20);
}
Off(OUT_BC);
}
sub Blackto_White_L()
{
while(SENSOR_1<lightgray){
OnFwd(OUT_B,20);
OnRev(OUT_C,20);
}
Off(OUT_BC);
}
task main()
{
SetSensorLight(S1);
followline_R(150);
Blackto_White_L();
followline_L(200);
Blackto_White_R();
followline_R2(200);
catch;
turn;
followline_R(150);
Blackto_White();
followline_L(150);
Blackto_White_L();
followline_L(200);
Blackto_White();
followline_L(200);
Blackto_White();
followline_L(200);
Blackto_White();
followline_R(150);
Blackto_White();
followline_R(150);
release;
osidasi;
}
*まとめ [#b411665f]
今回もなんとか課題をクリアすることができた.
しかし,プログラミングの制作時には,プログラム自体は間違...
ページ名: