| 創(chuàng)澤機(jī)器人 |
| CHUANGZE ROBOT |
將兩個(gè)巡線傳感器分開一 點(diǎn)距離(大于線的寬度)安裝在機(jī)器人的底盤 上,開始巡線的時(shí)候令黑線正好從兩個(gè)巡線傳 感器之間穿過,如圖8-1所示。這樣,如果兩 個(gè)傳感器檢測(cè)到都在白色的地板上方,就說明 機(jī)器人在線的上方,可以讓機(jī)器人一直往前 走;如果右邊的傳感器檢測(cè)到了黑線,就往右 轉(zhuǎn);如果左邊的傳感器檢測(cè)到了黑線就往左 轉(zhuǎn)。若用原來的方法,即使機(jī)器人遇到一根直線,也要走“之”字形前進(jìn),而如果采用剛剛 設(shè)計(jì)的方案,機(jī)器人在巡直線的時(shí)候就完全可以筆直前進(jìn)了,這樣它就可以比“之”字形巡 線法跑得更快了。
當(dāng)使用兩個(gè)傳感器時(shí),在巡直線時(shí)機(jī)器人可以一直前進(jìn)而不用拐彎,這樣比走“之”字形的 軌跡就要平滑得多了。怎樣讓它走得更加平滑呢?很自然地,同學(xué)們就會(huì)想到,能不能再 增加更多的傳感器數(shù)量呢?沒錯(cuò),這是一種很常用的辦法。
如果有4個(gè)巡線傳感器,就可以這么做:假設(shè)把4個(gè)傳感器從右到左分別叫做1號(hào)、 2號(hào)、3號(hào)、4號(hào)。如果1號(hào)檢測(cè)到了黑線,說明機(jī)器人行進(jìn)的方向和黑線之間的角度已經(jīng) 很大了,應(yīng)該馬上向右大幅轉(zhuǎn)動(dòng);否則,如果2號(hào)檢測(cè)到了黑線,則說明機(jī)器人的行進(jìn)方向 和黑線之間有角度但還不是很大,只需要向右“溫柔”地轉(zhuǎn)彎就可以了。對(duì)于3號(hào)、4號(hào)傳 感器,同學(xué)們可以用類似的方法進(jìn)行分析。這樣我們?cè)诳刂瞥绦蛑芯涂梢耘袛啵鶕?jù)不同 的傳感器給出不同的電機(jī)控制信號(hào)。用這種方法,機(jī)器人不僅比只有兩個(gè)傳感器時(shí)跑得 更快、更平滑,而且對(duì)于突然急轉(zhuǎn)彎的黑線有更好的適應(yīng)性。同學(xué)們會(huì)發(fā)現(xiàn)小機(jī)器人跑得 更加可靠了。
到目前為止,我們已經(jīng)為機(jī)器人編寫過好幾個(gè)小程序了。在每個(gè)程序中都免不了要 和各種數(shù)字打交道,比如所使用的接口、傳感器的讀數(shù)、地面的灰度閾值等。在編寫程序的過程中,也許有的同學(xué)已經(jīng)發(fā)現(xiàn)了很多不方便的地方。
比如說在使用 pinMode 命令為端口規(guī)定方向時(shí)肯定要用到它的編號(hào),然后再用 digitalRead 之類的命令操縱端口時(shí)也要用到同一個(gè)編號(hào)。同學(xué)們想一想,如果某天我們 突然要改為使用另一個(gè)端口,那么是不是要一個(gè)一個(gè)地把它的編號(hào)改變過去呢?顯然用 這種方式編寫程序修改起來既費(fèi)力又容易出錯(cuò)。
再比如說,有時(shí)我們用analogRead 命令讀到了傳感器當(dāng)前的值,但如果在接下來的 程序里我們還要用到這個(gè)值做比較復(fù)雜的計(jì)算,該怎么辦呢?我們可不想在接下來的算 式中每個(gè)用到這個(gè)值的地方都去調(diào)用一次analogRead 命令,因?yàn)檫@樣做的代價(jià)太大了。 實(shí)際上,在C 語言編程中,只要合理地使用常量和變量就可以很方便地解決上面這 幾個(gè)問題了。
1.變量
變量是什么?顧名思義,變量就是數(shù)值可能發(fā)生變化的量。在程序中,常常需要把一 個(gè)數(shù)據(jù)存儲(chǔ)起來供以后使用,還可能隨時(shí)在程序中更改這個(gè)數(shù)據(jù)的值。這種情況下,就要 用到變量了。變量由數(shù)據(jù)類型、變量名和變量的值組成。
假設(shè)主控板上有一個(gè)溫度傳感器能感知外界溫度。可以在程序里就可以聲明一個(gè)叫 作溫度(Temperature) 的變量來記錄傳感器的數(shù)值,并且聲明它的類型是整數(shù)型。
int temperature; //int 代表變量類型是整數(shù),變量名為 temperature, 表示溫度
而在后面的程序運(yùn)行過程中,主控板測(cè)得當(dāng)前溫度為20℃,在程序中就可以給溫度 變量賦值為20。這時(shí),如果要用它做各種計(jì)算,那么只要用temperature 這個(gè)變量名就可 以代表當(dāng)前的溫度值了。
temperature=20; //將溫度賦值為20℃
2.變量的聲明與賦值
上面的例子中,先聲明了一個(gè)名叫 temperature 的整數(shù)型的變量。然后又將它賦值 為20。我們這么做時(shí),變量的聲明和賦值是分開進(jìn)行的。而在另一種情況下,也可以在 聲明變量的同時(shí)就為它賦值。這時(shí)給變量賦予的值叫作初始值或是默認(rèn)值。比如,我們 認(rèn)為房間內(nèi)大部分情況下溫度是23℃。就可以這樣做:
int temperature=23; //聲明名為temperature 的整型變量,并設(shè)初始值為23
當(dāng)然,在后續(xù)的程序中隨時(shí)可以改變這個(gè)變量的值,將它重新賦值為那時(shí)的溫度值。 這也是我們?yōu)槭裁匆褂米兞康脑颉?
在為變量命名時(shí),可以根據(jù)習(xí)慣使用英文或漢語拼音。但是,要注意的是變量名一般 都要和變量的實(shí)際用途相關(guān)。有的同學(xué)為了省事,喜歡用a0 、b1 之類的簡(jiǎn)單字母加上個(gè) 數(shù)字作為變量名。這樣做是很壞的習(xí)慣,你的代碼將會(huì)很難被別人讀懂,甚至不久后你自 己都忘了它們是做什么用的。所以,請(qǐng)同學(xué)們一定要養(yǎng)成良好的命名習(xí)慣。這也是優(yōu)秀 的程序員的標(biāo)志之一。
3.常量
常量就是數(shù)值永遠(yuǎn)不會(huì)發(fā)生變化的量。我們?cè)跀?shù)學(xué)課中已經(jīng)接觸過好幾個(gè)大名鼎鼎 的變量,和它相對(duì)的自然就是常量了。圓周率π就是一個(gè)大小永遠(yuǎn)不變的量 — — 常量。 在計(jì)算機(jī)程序中,有的數(shù)值是在程序的整個(gè)生命中都不會(huì)被改變的,我們就Z好用常量來 表示它們。常量的聲明很簡(jiǎn)單,只要在變量的類型前加上一個(gè) const 就可以了。不過,和 變量不同的一點(diǎn)是,常量在聲明時(shí)一定要給它賦值,這個(gè)值就是它那個(gè)永遠(yuǎn)不變的值。
現(xiàn)在,同學(xué)們可能已經(jīng)想到了,我們?cè)诔绦蛑兴褂玫亩丝诘木幪?hào)就是典型的應(yīng)該使 用常量來定義的。下面的例子就聲明了一個(gè)整數(shù)類型的常量,用來表示 LED 小燈連接到 了主控板上的3號(hào)端口上。
const int ledPort=3; //聲明一個(gè)名為 ledPort 的整數(shù)型常量,并賦值為3
4.數(shù)據(jù)類型
以前所舉的所有例子里,變量和常量都是用來表示整數(shù)的。同學(xué)們一定會(huì)好奇,除了 整數(shù)類型,我們至少還學(xué)習(xí)過小數(shù)啊!比如,如果測(cè)得的溫度值是20.5℃,那可怎么辦 呢?現(xiàn)在就來介紹 一 下C 語言中的其他幾種常用數(shù)據(jù)類型
此外,如果在 int 和 char 類型的變量前加上 unsigned 關(guān)鍵字,就代表這個(gè)變量不可 能為負(fù)值。
好了,現(xiàn)在就在一個(gè)實(shí)際例子中,用剛剛學(xué)到的知識(shí)定義幾個(gè)不同類型的變量。
假設(shè)我們的程序需要處理學(xué)生的成績(jī),每個(gè)學(xué)生在考試中都得到了一個(gè)百分制的分 數(shù),而這個(gè)分?jǐn)?shù)又可以分為A、B 、C、D4 擋,還可以根據(jù)分?jǐn)?shù)夠不夠60分判斷是否及格。 已知全班同學(xué)的分?jǐn)?shù)后還可以計(jì)算出平均分。那么很可能需要聲明以下幾個(gè)變量:
int score;
boolean isQualified;
char grade;
float averageScore;
//整數(shù)類型變量score 代表學(xué)生的分?jǐn)?shù)
//布爾類型變量isQualified 代表學(xué)生是否及格
//字符類型變量 char 代表學(xué)生的分?jǐn)?shù)等JA,B,C,D //浮點(diǎn)數(shù)類型變量averageScore 代表全班的平均分
![]() |
| 機(jī)器人底盤 Disinfection Robot 消毒機(jī)器人 講解機(jī)器人 迎賓機(jī)器人 移動(dòng)機(jī)器人底盤 商用機(jī)器人 智能垃圾站 智能服務(wù)機(jī)器人 大屏機(jī)器人 霧化消毒機(jī)器人 展廳機(jī)器人 服務(wù)機(jī)器人底盤 具身智能教育機(jī)器人 智能配送機(jī)器人 導(dǎo)覽機(jī)器人 |