| 創(chuàng)澤機(jī)器人 |
| CHUANGZE ROBOT |
Z簡(jiǎn)單的傳感器是什么,我一定會(huì)回答是微觸開(kāi)關(guān),如圖5-1 所示。其實(shí)它和我們生活中常常見(jiàn)到的開(kāi)關(guān)沒(méi)有太大區(qū)別。
微觸開(kāi)關(guān)也只有“開(kāi)”和“閉” 兩種不同的狀態(tài),不過(guò)它對(duì)于觸碰是非常敏感的,只要稍微碰到一點(diǎn)點(diǎn),開(kāi)關(guān)就會(huì)合上。 如果把它連接到主控制器,用程序就能很準(zhǔn)確地檢測(cè)到它的開(kāi)閉變化了。同學(xué)們想想看, 它是不是和昆蟲(chóng)的觸角很像呢?我們這節(jié)課就要用兩個(gè)微觸開(kāi)關(guān)傳感器來(lái)模擬昆蟲(chóng)觸角 的功能。
對(duì)于機(jī)器人來(lái)說(shuō),微觸開(kāi)關(guān)就是一個(gè)輸入器件。究竟什么是輸入,什么是輸出呢?我 們?cè)趺蠢弥骺刂破鞯妮斎牒洼敵龉δ苣?其實(shí)這個(gè)概念非常簡(jiǎn)單,如果將主控制器的 一個(gè)端口連接到傳感器,它就是被作為一個(gè)輸入端口在使用,因?yàn)槲覀円脗鞲衅髯x入 關(guān)于環(huán)境的信息。而反之,如果將端口連接到執(zhí)行器,比如一個(gè)LED 小燈模塊或一個(gè)蜂 鳴器模塊,那么它就變成了一個(gè)輸出端口,因?yàn)槲覀兪怯幂敵鲂畔⑷タ刂茍?zhí)行器執(zhí)行一些 動(dòng)作。
在Arduino 主控制器中,每個(gè)端口都既可以用作輸入端口又可以用作輸出端口,同學(xué) 們需要在使用時(shí)根據(jù)實(shí)際用途將它們?cè)O(shè)置為適當(dāng)?shù)姆较颉_@時(shí)就要看到前面課程中已經(jīng) 見(jiàn)到過(guò)的一個(gè)“熟面孔”——pinMode 命令,它的用法如下:
pinMode(3,INPUT);
pinMode(5,OUTPUT);
當(dāng)我們這樣使用pinMode 命令時(shí),編號(hào)為3號(hào)的端口變成輸人模式,之后就能使用上面 連接的傳感器了。5號(hào)端口則變成輸出模式,如果要操縱的是LED 小燈或蜂鳴器之類(lèi)的 執(zhí)行模塊,就一定要記得將端口設(shè)置為輸出模式。
一般地,我們?cè)诰帉?xiě)程序時(shí)只需要設(shè)置一次端口的方向就夠了。請(qǐng)同學(xué)們回想一下 Arduino 的程序結(jié)構(gòu),pinMode 這個(gè)命令Z適合出現(xiàn)的地點(diǎn)是不是setup 中呢?
假設(shè)將微觸開(kāi)關(guān)連接到3號(hào)端口,并用pinMode 命令將端口設(shè)置成輸入方向。那么 在后面的程序中,當(dāng)需要知道微觸開(kāi)關(guān)的開(kāi)閉狀態(tài)時(shí),只要用 digitalRead 命令就可以很 方便地讀取微觸開(kāi)關(guān)的值了,這個(gè)命令的用法如下:
int value=digitalRead(3);
我們這樣使用這條命令,就能夠得到在第3號(hào)端口上的狀態(tài),它是一個(gè)值為 HIGH 或者 LOW 的數(shù)字。如果微觸開(kāi)關(guān)的狀態(tài)是閉合的,使用 digitalRead 命令得到的就是一個(gè) LOW; 反之則得到HIGH 。 這樣,我們只要判斷一下 digitalRead 的返回值就知道開(kāi)關(guān)的 狀態(tài)了。在這本書(shū)中,用到的所有開(kāi)關(guān)類(lèi)型的傳感器都可以用這樣的方法讀取它們的 狀 態(tài) 。
用條件語(yǔ)句讓機(jī)器人更智能
前幾節(jié)課中我們編寫(xiě)的程序都是那種Z簡(jiǎn)單的“面條型”程序,也就是其中的每個(gè)語(yǔ) 句都會(huì)被順序執(zhí)行。而為小機(jī)器人編寫(xiě)智能程序時(shí),肯定希望在某種條件下機(jī)器人做某 件事情,在另一種條件下機(jī)器人去做另一種事情。那么如何讓機(jī)器人做到這一點(diǎn)呢?這 就需要用到C 語(yǔ)言中Z常用的語(yǔ)句——條件語(yǔ)句了。條件語(yǔ)句由 if 關(guān)鍵字、else 關(guān)鍵字 和條件表達(dá)式組成。
我們先來(lái)看看什么是條件表達(dá)式。簡(jiǎn)單地說(shuō),條件表達(dá)式是一個(gè)結(jié)果值只可能為 “真”(true) 或“假”(false) 的計(jì)算式。它們可以分為兩種: 一種叫關(guān)系運(yùn)算;另一種叫邏輯 運(yùn)算。關(guān)系運(yùn)算主要用來(lái)判斷值的大小關(guān)系,比如判斷a 和 b 是否相等,或是判斷c 和 d 誰(shuí)大誰(shuí)小。而使用邏輯運(yùn)算可以把幾個(gè)關(guān)系運(yùn)算連接起來(lái),表達(dá)更復(fù)雜的邏輯,比如,“a 大于b, 而 且c 大 于d” 這個(gè)式子是真還是假?我們把Z常用的這類(lèi)運(yùn)算總結(jié)在表5-1和 表5-2中。
知道了條件表達(dá)式的用法,學(xué)會(huì)條件語(yǔ)句就沒(méi)有任何困難了。下面是條件語(yǔ)句Z常
用的幾種用法。
if (條件表達(dá)式){ 語(yǔ)句;
}
//在這里寫(xiě)條件滿(mǎn)足時(shí)執(zhí)行的語(yǔ)句
條件語(yǔ)句Z簡(jiǎn)單的用法就像上面這樣,在條件表達(dá)式的值為真時(shí)執(zhí)行大括號(hào)中的語(yǔ) 句,如果為假則直接跳過(guò)執(zhí)行大括號(hào)后面的部分。
注意:上面的內(nèi)容中用“語(yǔ)句;”代替的大括號(hào)內(nèi)的部分是可以包含多條語(yǔ)句的。
if (條件表達(dá)式){
語(yǔ)句1; }else{
語(yǔ)句2;
//在這里寫(xiě)條件滿(mǎn)足時(shí)執(zhí)行的語(yǔ)句
//在這里寫(xiě)條件不滿(mǎn)足時(shí)執(zhí)行的語(yǔ)句
這種用法下,如果條件表達(dá)式得到滿(mǎn)足,就執(zhí)行語(yǔ)句1;否則執(zhí)行語(yǔ)句2。
if (條件表達(dá)式1){
語(yǔ)句1;
else if(條件表達(dá)式2){
語(yǔ)句2; }else{
語(yǔ)句3; //在這里寫(xiě)條件1滿(mǎn)足時(shí)執(zhí)行的語(yǔ)句
//在這里寫(xiě)條件1不滿(mǎn)足但條件2滿(mǎn)足時(shí)執(zhí)行的語(yǔ)句 //在這里寫(xiě)所有條件均不滿(mǎn)足時(shí)執(zhí)行的語(yǔ)句
上面這種用法有兩個(gè)條件表達(dá)式,我們的程序會(huì)先判斷D一個(gè)表達(dá)式是否滿(mǎn)足,如果 D一個(gè)條件是 true 就執(zhí)行語(yǔ)句1;否則判斷第2個(gè)條件,如果是true 就執(zhí)行語(yǔ)句2,是 false 則執(zhí)行語(yǔ)句3。記住如果還有多個(gè)條件需要判斷,還可以再去增加更多的else if。
![]() |
| 機(jī)器人底盤(pán) Disinfection Robot 消毒機(jī)器人 講解機(jī)器人 迎賓機(jī)器人 移動(dòng)機(jī)器人底盤(pán) 商用機(jī)器人 智能垃圾站 智能服務(wù)機(jī)器人 大屏機(jī)器人 霧化消毒機(jī)器人 展廳機(jī)器人 服務(wù)機(jī)器人底盤(pán) 具身智能教育機(jī)器人 智能配送機(jī)器人 導(dǎo)覽機(jī)器人 |