- 追加された行はこの色です。
- 削除された行はこの色です。
[[2009a/A7/課題2左]]
Hauntページ
*プログラム [#r0c24bab]
#define T 40//閾値を40に定義
#define a OUT_A
#define c OUT_C
#define s1 SENSOR_1
#define s2 SENSOR_2
#define s3 SENSOR_3
int flag = 0;
int t = 0;
#define fwd(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);
#define rev(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);
#define w(t) Wait(t);
task main()
{
task main(){
SetSensor(SENSOR_2,SENSOR_TOUCH); //センサー2をセット
start light;//ライトセンサーのプログラム開始
while(true){
if((s2 == 1)&&(FastTimer(0)<400)){ //もしセンサー2が反応してすぐ4秒以内にまたセンサー2が反応したら (牛乳パックと認識して)
stop light;
fwd(100); //牛乳パックを持って
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(160);
rev(50);
OnFwd(c);
OnRev(a);
w(100); //その場で回転して
rev(20) //またもとの位置に戻して
start light; ライントレースを開始する
if((SENSOR_2 == 1)&&(FastTimer(0)<400)){ //もしセンサー2が反応してすぐ4秒以内にまたセンサー2が反応したら
stop light;fwd(100);OnFwd(OUT_A);OnRev(OUT_C);Wait(160);rev(50);OnFwd(c);OnRev(a);w(100);rev(20)//そ牛乳パックを持ってのその場で回転する
start light;} ライントレースを開始する
else{ if(SENSOR_2 == 1){ //もしセンサー2が反応したら
stop light; //光センサーのタスクを停止して
ClearTimer(0); //タイマーを開始して
Off(a+c);Wait(50); //少し後ろに進んで
OnRev(a+c); Wait(100);Off(a+c) //また少し前に進む
start light;} //そして光センサーのタスクを開始する
}
else{
if(SENSOR_2 == 1){ //もしセンサー2が反応したら
stop light; //光センサーのタスクを停止して
ClearTimer(0); //タイマーを開始して
Off(OUT_A+OUT_C);Wait(50); //少し後ろに進んで
OnRev(OUT_A+OUT_C); Wait(100); //また少し前に進む
Off(OUT_A+OUT_C);Wait(50);
start light; //そして光センサーのタスクを開始する
}
}
}
}
task light()//ライトセンサーのプログラム
{
OnFwd(OUT_A+OUT_C);
SetSensor(s1,SENSOR_LIGHT);センサー1を光センサーにセット
SetSensor(s3,SENSOR_LIGHT);センサー3を光センサーにセット
task light(){//ライトセンサーのプログラム
SetSensor(SENSOR_1,SENSOR_LIGHT);センサー1を光センサーにセット
SetSensor(SENSOR_3,SENSOR_LIGHT);センサー3を光センサーにセット
ClearTimer(0);タイマー開始
while(flag < 9){
if(s1>T){ //もしセンサー1が
if(s3>T){ //もしセンサー3が
OnFwd(c); //ともに定義した閾値より高いとき
OnFwd(a); 前進
}
else{
if(s1>T){ //もしセンサー1だけが定義した閾値より高いとき
OnFwd(a); //右に進む
OnRev(c);
Wait(5);
Off(OUT_C+OUT_A);
}
}
}
else{
if(s3>T){ //もしセンサー3だけが定義した閾値より高いとき
OnFwd(c); //左に進む
OnRev(a);
Wait(5);
Off(a+c);
}
else{ //もしセンサー1と3が定義した閾値より両方低いとき、
flag++; //カウントを1プラスして
Off(a+c);
Wait(100); //1秒間止まる
OnFwd(c); //そして交差点を通過する
OnFwd(a);
Wait(30);
}
}
}
}
while(flag < 9){
if(SENSOR_1>T){ //もしセンサー1が
if(SENSOR_3>T){ //もしセンサー3が
OnFwd(c); //ともに定義した閾値より高いとき
OnFwd(a);}//前進
else{
if(SENSOR_1>T){ //もしセンサー1だけが定義した閾値より高いとき
OnFwd(a);OnRev(c);Wait(5);Off(OUT_C+OUT_A);} //右に進む
}
}
else{
if(SENSOR_3>T){ //もしセンサー3だけが定義した閾値より高いとき
OnFwd(c);OnRev(a);Wait(5);Off(a+c);}//左に進む
else{ //もしセンサー1と3が定義した閾値より両方低いとき、
flag++; //カウントを1プラスして
Off(a+c);Wait(100); //1秒間止まる
fwdt(30);}//そして交差点を通過する
}
}
}
}