| 創(chuàng)澤機器人 |
| CHUANGZE ROBOT |
要用黑膠帶制作一幅迷宮地圖,如圖10-3所示。在迷宮的出口處 用一個障礙物當(dāng)作“寶藏”。然后,我們機器人的任務(wù)就是順利通過迷宮并且停在“寶藏” 前面。這里先來處理一個簡化的問題,假設(shè)迷宮的地圖是已知的,也就是說,機器人知道應(yīng)該向什么方向,轉(zhuǎn)幾次彎才能走出迷宮。
實 驗 器 材
· 已經(jīng)組裝好的機器人;
· 計算機及軟件編程環(huán)境;
·USB 下載線;
· 主控制器;
· 地面灰度檢測傳感器模塊4塊;
· 紅外避障傳感器1個;
· 黑色膠帶1卷;
· 作為寶箱的淺色立方體1個。
實驗步驟
1.連接機器人
先將機器人、擴展板和地面灰度檢測傳感器模塊連接好。其中,地面灰度檢測傳感 器連接到A0~A3 端口。紅外避障傳感器連接到D3 端口。
2.調(diào)試灰度閾值
同樣,像以前一樣通過實驗確定機器人所采用的灰度閾值。因為4個傳感器的電路 和安裝上可能會出現(xiàn)微小的差別,所以這里比較穩(wěn)妥的處理方式是不要嫌麻煩,為它們每 個都測量一個灰度閾值。
3.編寫程序
假設(shè)在已知的地圖中,機器人只要在碰到路口時先進行兩次左轉(zhuǎn)彎,再進行一次右轉(zhuǎn) 彎,就能走出迷宮了。用我們剛剛學(xué)習(xí)過的函數(shù)知識,這個程序可以寫成下面示例中的樣 子。同樣,這個示例中與上節(jié)課示例程序有很多重合的地方,用省略號將之略去。
函數(shù)如何封裝的問題,是沒有一個固定答案的,示例程序中給出的可能也不是Z好的解決方案?傊己玫暮瘮(shù)封裝可以讓你的程序變得更簡潔、更可讀以及更容易維護和 修改,同學(xué)們在慢慢積累編程經(jīng)驗的過程中就會摸索出如何封裝函數(shù)的竅門了。
const int InfraPort=3;
int counter=0;
//函數(shù)聲明
void turn_left();
void turn_right();
void stop();
void go_straight();
void setup(){
pinMode(InfraPort,INPUT);
} void loop(){
if(digitalRead(InfraPort)==HIGH){ stop();
while(1);
//避障傳感器連接D3 端口
//用于計數(shù)通過路口數(shù)目的變量
//找到寶藏,停下來
}
if(leftValue
}else if(leftValue>Threshold II rightValue>Threshold){ //遇到路口
if(counter<2){
turn_left();
}else if(counter==2){
turn_right(); }else{
stop();
while(1); }
counter++;
)else if(leftMiddleValue>Threshold){
analogWrite(LeftSpeedPort,TurnHighSpeed);
analogWrite(RightSpeedPort,TurnLowSpeed); )elsef
analogWrite(LeftSpeedPort,TurnLowSpeed);
analogWrite(RightSpeedPort,TurnHighSpeed); }
delay(100);
//前兩次遇到路口左轉(zhuǎn)
//第3次遇到路口右轉(zhuǎn)
//再遇到路口就停止,有可能地圖出錯了
//向右轉(zhuǎn)彎
//向左轉(zhuǎn)彎
//左轉(zhuǎn)90°的函數(shù)實現(xiàn)
void turn_left(){
digitalWrite(LeftDirPort,LOW);
analogWrite(LeftSpeedPort,Forwardspeed);
analogWrite(RightspeedPort,ForwardSpeed);
delay(DelayTime);
digitalWrite(LeftDirPort,HIGH);
}
//右轉(zhuǎn)90°的函數(shù)實現(xiàn)
void turn_right(){
digitalWrite(RightDirPort,LOW);
analogWrite(RightSpeedPort,ForwardSpeed);
analogWrite(LeftSpeedPort,Forwardspeed);
delay(DelayTime);
digitalWrite(RightDirPort,HIGH); }
//直行函數(shù)
void go_straight(){
analogWrite(LeftSpeedPort,ForwardSpeed);
analogWrite(RightSpeedPort,ForwardSpeed); }
//停止函數(shù)
void stop(){
analogWrite(LeftSpeedPort,0);
analogWrite(RightSpeedPort,0);
![]() |
| 機器人底盤 Disinfection Robot 消毒機器人 講解機器人 迎賓機器人 移動機器人底盤 商用機器人 智能垃圾站 智能服務(wù)機器人 大屏機器人 霧化消毒機器人 展廳機器人 服務(wù)機器人底盤 具身智能教育機器人 智能配送機器人 導(dǎo)覽機器人 |