感測器接法
紅外感測器接法
前紅外: 數字9
左紅外: 數字15
左45度角紅外: 數字10
右45度角紅外: 數字8
右紅外: 數字14
火焰感測器接法
左火焰: 模擬3
中火焰: 模擬5
右火焰: 模擬4
(底部)灰度感測器: 模擬2
聲控感測器: 模擬6
程式說明
#define p 120 //定義火焰感測器檢測到火焰的返回值
int k,j,i=0,n,b=1,c=1; //程式控制變數,不必更改
int m=i;
int pro,end=1;
void main() //主程式
while(!(analog(2)>100)) //走出白色超始區
pro=start_process(test()); //啟動地面標誌線檢測程序
while(1) //滅火與迷宮程式切換
else //沒有發現火焰,進入迷宮子程式}}
void migong() //迷宮子程式
else if(digital(14)==0 && digital(9)==1 && digital(8)==1) //如果只右方有障礙物,直行
else //如果沒有障礙物,右轉
if((i>2)&&(i>m)) //如果標誌線數大於2且標誌線有變化(針對1、2、3號房間)
m=i+1; //更改標誌線的對比變數
}if(i==1 && b && (analog(3)>150 && analog(5)>150 && analog(4)>150)) //4號房間,檢測到第1條標誌線,且沒有火焰
while(digital(9)==1) //前方感測器沒有障礙物,右前進
b=0; //控制變數
}
}void fire() //滅火子程式
motor(0,60); //強制直行一段
motor(1,60); //主要是解決2號房間右手法則滅火時的碰牆的情況
sleep(0.6);
c=0;
}while(analog(5)<10 && analog(2)<60) //如果火焰距離合適 且 檢測到地面標誌線,滅火
while(analog(3)-analog(4)> 3) //向右調整,如果調整較頻繁,修改最後的3
while(analog(4)-analog(3)> 3) //向左調整,同上
motor(0,40); //直行
motor(1,40);
}void test() //地面標誌線檢測子程式
n=j;}}
void select() //回家程式選擇子程式
void gohome_4() //4號房間回家子程式
void gohome_3() //3號房間回家子程式
void gohome_2() //2號房間的特殊回家程式
while(digital(15)==0 && digital(9)==1 && digital(10)==1)
while(digital(15)==1 && digital(9)==1 && digital(10)==1)
}stop();
sleep(0.1);
while(digital(9)==0) //如果前方有障礙物,右轉(調整姿勢)
while(digital(9) == 1) //如果前方沒有障礙物,左、右手法則並進,基本上直行到另一端(3號房間旁)
if(digital(14)==0 && digital(8)==1) //右邊有障礙物且右45度角無障礙物,直行
if(digital(10)==0) //左邊45度有障礙物,右轉
if(digital(15)==0 && digital(10)==1) //左邊有障礙物且左45度角無障礙物,直行
motor(0,50); //直行
motor(1,50);
}start_process(endstop()); //前方有障礙物時,退出迴圈,開啟終點停止程序
while(end) //左手法則走迷宮
else if (digital(15)==0 && digital(9)==1 && digital(10)==1)
else
} motor(0,-100); //終點剎車
motor(1,-100);
sleep(0.1);
stop(); //停止
sleep(100.0);
}void gohome_1() //1號房間回家
void mg_right() //右手法則走迷宮子程式
else if(digital(14)==0 && digital(9)==1 && digital(8)==1)
else
}
}void mg_left() //左手法則走迷宮子程式
else if(digital(15)==0 && digital(9)==1 && digital(10)==1)
else
}
}void endstop() //終點停止程序子程式}}
//全部程式結束