無火不進房間回家程式及說明 廣茂達滅火機械人

2022-01-19 20:13:16 字數 2740 閱讀 5883

感測器接法

紅外感測器接法

前紅外: 數字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()     //終點停止程序子程式}}

//全部程式結束