工具列說明(邏輯、運算、內部元件)

邏輯:

可設定不同的條件和判斷,讓機器人有系統性的進行思考,就像我們在生活中,面對不同的問題、情境而進行思考,例如:看到紅燈停、聽見鈴聲就回教室…等。

❶邏輯判斷-如果…執行:

當所設定的條件成立時,就會執行指定的動作。

舉例說明:

如下圖,如果超音波感應器回傳的偵測距離小於15公分的條件成立時,執行蜂鳴器發出Do的聲音。

點選左上方藍色小齒輪,將需要使用的判斷式拉入右方【如果】的框中,即能增加或改變邏輯判斷的條件和形式。

邏輯判斷共有「三種」條件設定的型態:

  1. 如果…執行

  2. 如果…執行…否則

  3. 如果…執行…否則如果…執行。

1.如果…執行:

只能設定一種條件,當條件成立執行動作。

舉例說明:

如下圖,如果超音波感應器回傳的偵測距離小於15公分的條件成立時,執行蜂鳴器發出Do的聲音。

2.如果…執行…否則:

能設定兩種條件:成立、不成立。當設定條件成立時,執行動作,否則執行條件不成立的動作。

舉例說明:

如下圖,如果超音波感應器回傳的偵測距離小於15公分的條件成立時,執行蜂鳴器發出Do的聲音,否則執行蜂鳴器發出Re的聲音(表示超音波感應器的偵測距離大於等於15公分)。

3.如果…執行…否則如果…執行:

可以設定兩種以上的條件,如果有設定的條件成立時,會執行所設定的動作。

舉例說明:

如下圖,如果超音波感應器回傳的偵測距離小於10公分的條件成立時,執行蜂鳴器發出Do的聲音,否則如果超音波感應器回傳的偵測距離小於20公分的條件成立時,執行蜂鳴器發出Re的聲音,否則如果超音波感應器回傳的偵測距離小於30公分的條件成立時,執行蜂鳴器發出Mi的聲音。

如果程式需要三種以上的條件時,可以將這三種邏輯判斷式搭配使用,第一層如果…執行、中間否則如果…執行、最後是否則;在程式最後使用否則的寫法除了比較簡短以外,也不需要擔心是否有其他條件忘了設定,因為只要前面兩項條件都不成立,不論任何狀況都會執行最後否則所設定的指令。

舉例說明:

如下圖,如果超音波感應器回傳的偵測距離小於10公分的條件成立時,執行蜂鳴器發出Do的聲音;否則如果超音波感應器回傳的偵測距離小於20公分的條件成立時,執行蜂鳴器發出Re的聲音;否則執行蜂鳴器發出Mi的聲音。

❷邏輯關係-大於、小於、等於

大家可以發現這個拼圖也是屬於左凸方塊,所以它會回傳一個布林值(真假值)。利用大於、小於、等於…等運算工具,對第一個值與第二個值進行比對,結果不是真(符合)就是假(不符合)。

舉例說明:

判斷紅外線感應器1號的回傳數值等於1的條件是否成立,若是條件成立這個拼圖的值就是【真】,不符合的話,值就是【假】。

共有三種形式可以使用,淺色框中的倒三角為下拉式按鈕,可選擇大於、小於、等於…等運算工具。

❸邏輯運算-且、或

左凸方塊,也是回傳的是布林值,會依照前後兩個框中的條件進行比較比較,比較的結果為布林值(真假值),比較的條件符合為真、不符合為假;且能增加更多的條件設定或範圍。

共有兩種形式可以使用,在淺色框中的下拉式按鈕可選擇且、或。

第一種形式為且,表示前後兩者的條件都需符合,回傳的值才會是【真】;通常會搭配【如果】的判斷拼圖進行完整的程式指令。

舉例說明:

如果超音波感應器回傳的偵測距離大於等於0且小於15公分的條件成立時,執行蜂鳴器發出Do的聲音。

第二種形式為或,表示前後者【只要有其中一個條件符合】,回傳的值就會是【真】;通常會搭配【如果】的判斷拼圖進行完整的程式指令。

舉例說明:

如果紅外線感應器1號的回傳數值等於1或紅外線感應器2號的回傳的數值等於1,其中一項條件成立時,執行蜂鳴器發出Do的聲音。

❹邏輯運算-真、假

布林值拼圖,可設定值為真或假,在程式運用中,我們也常用數字1和0來代表真假,1代表真、0代表假。

共有兩種形式可以使用,淺色框中的下拉式按鈕可選擇真、假。

舉例說明:

如果紅外線感應器1號的回傳數值等於真(1)的條件成立時,執行蜂鳴器發出Do的聲音。

舉例說明:

如果紅外線感應器1號的回傳數值等於假(0)的條件成立時,執行蜂鳴器發出Re的聲音。

❺邏輯運算-不成立

簡單來說就是把拼圖裡面的布林值進行反向轉換,真變假,假變真。

舉例說明:

若紅外線感應器為真的條件成立,應該要回傳【真】值,但是因為加上不成立,真就會變成假,所以最後的結果為【假】的值。

舉例說明:

如果紅外線感應器1號的回傳數值不等於0的條件成立時,執行蜂鳴器發出Do的聲音。

❻邏輯運算-空

這個值代表在記憶體中,未儲存任何值,亦不包含0,因為0也是一種數值。

控制:

可以設定機器人執行指令的時間或次數。

❶取得目前毫秒數

可以取得目前的時間,單位是毫秒數。

舉例說明:

首先取得目前的時間,儲存在「開始時間」的變數中,接著如果從開始時間起算,到現在還沒有超過5000毫秒(即:現在時間-開始時間<5000),則LED燈亮紅燈,直到超過了5000毫秒,LED燈亮綠燈。

❷延遲

控制前一個指令延遲的時間,單位為毫秒(1秒=1000毫秒),因為FlipCode執行程式時速度非常快,所以如果沒有設定指令持續的時間,容易發生指令用非常快的速度執行完畢,也因為執行速度太快,無法確定是否有正確執行指令。

舉例說明:

我們希望機器人能執行的指令為蜂鳴器發出Do的聲音1秒後,蜂鳴器再發出Re的聲音1秒,如左方圖;若沒有增加延遲,程式就會在蜂鳴器發出Do和Re的指令中快速切換,因為速度太快,導致於最後只能呈現其中一種動作,如右方圖。

❸循環計數

可以控制指令執行的次數,變數名稱可在淺色框中的下拉式按鈕進行修改,中間的兩個綠色拼圖可以設定次數的範圍,而最右方的綠色拼圖表示每次執行完指令後增加的數值。

舉例說明:

為了能準確地執行範圍內的動作,請將循環計數的拼圖拉入初始化的區塊中,再設定名稱為執行次數,變數範圍為1~10,拉入馬達1號以200的速度,持續運轉0.5秒和停止0.5秒的拼圖;這個程式表示開機後會有一個變數叫做執行次數,一開始的數值為1,會執行馬達1號運轉0.5秒再停止0.5秒的動作,每次做完指令變數就會+1,直到變數數值為10停止動作,總共做了10遍。

❹重複

可以重複執行指令,就是和重複執行(loop)一樣,放在裡面的程式會一直重複執行,共有兩種設定條件的方式,第一種是當某個條件成立時(真值),重複執行設定的指令;另一種是當條件不成立時(假值),重複執行設定的指令。

共有兩種形式可以使用,在淺色框中的下拉式按鈕,可選擇當或直到。

舉例說明:

如下圖,當紅外線感應器回傳的數值等於1的條件成立時,會重複執行直流馬達1號運轉0.5秒和停止0.5秒的動作;條件不成立則會不執行動作。

舉例說明:

如下圖,當紅外線感應器回傳的數值不等於1的條件成立時,會重複執行直流馬達1號運轉0.5秒和停止0.5秒的動作;條件不成立時(紅外線感應器回傳的數值等於1),則會不執行動作。

數學:

程式中需要用的數值和數學運算

❶數字

在淺色框中可以輸入任何數字,表示給予某個指令一個數值。

舉例說明:

直流馬達M1號的輸出數值為255。

舉例說明:

延遲0.5秒。

❷數學運算

可以使用於數學運算中的加減乘除以及次方。

共有五種形式可以使用,在淺色框中的下拉式按鈕,可選擇不同的運算模式。

舉例說明:

可以在前後的框中,拉入數字的拼圖、變數或能回傳數值相關的其他拼圖進行數學運算。

❸取小值

在兩數值中取最小值,在前後淺色框中,可以輸入任何跟數值相關的拼圖,並在兩者中找出最小的那一方數值。

舉例說明:

5、3中,最小的數值為3,則回傳數值3。

❹取大值

在兩數值中取最大值,在前後淺色框中,可以輸入任何跟數值相關的拼圖,並在兩者中找出最大的那一方數值。

舉例說明:

20、255中,最大的數值為255,則回傳數值255。

❺限制數字

限制數值的範圍,在右方的兩個淺色框中,可以輸入任何跟數值相關的拼圖,並表示為最左方數值的範圍。

舉例說明:

左方的限制數字會藉於0~100之間。

❻映射值

更改數值範圍,表示最左方的數值範圍限制,從中間個兩個數值範圍,更改為最右方的兩個數值範圍,在淺色框中,可以輸入任何跟數值相關的拼圖。

舉例說明:

數值範圍從0~100更改為0~500。

舉例說明:

例如你有個光線感應器會回傳一個0到1023數值,但是因為你程式的需求,不希望回傳的值那麼大,想要把回傳的值,根據比例轉換成1至10,所以可以利用這個拼圖來處理。

文字:

可在淺色框中輸入要進行溝通的文字的,需注意不能輸入中文

❶文字

在淺色框中輸入文字。

舉例說明:

點選序列埠會顯示Hi。

變數:

像是一個盒子,盒子裡你可以放入任何可以被變動的數值、字串、指令…等

❶建立變數

點選變數中的建立變數,就會出現可以幫變數命名的小視窗,在框中輸入新變數為變數名稱,按下確定後,就可以看到工具列出現先變數的功能選項,第一個拼圖是幫新變數賦予數值、字串…等內容 。

舉例說明:新增一個變數命名為「新變數」,並賦予「新變數」數值為50

舉例說明:新增一個變數命名為「新變數」,並賦予「新變數」為字串「Hi」

舉例說明:

新增一個變數命名為「新變數」,並賦予「新變數」為超音波感應器偵測距離的回傳數值

舉例說明:

新增一個變數命名為「新變數」,並賦予「新變數」為紅外線感應器回傳的數值乘於5

舉例說明:

新增一個變數命名為「新變數」,並賦予「新變數」為超音波感應器回傳的距離除10,並判斷當「新變數」的數值小於10,執行直流馬達M1號以200的速度往順時針方向運轉,否則執行直流馬達M1號以200的速度往逆時針方向運轉

函式

可以將繁雜的程式指令包在一個拼圖中,減少重複製作的時間,而在需要使用這些指令時,只需使用製作完成的函式,不需要再重複製作。

❶到做些什麼

執行包在函式中的指令。

舉例說明:

首先先拉出一個新的函式,在做些什麼淺色框中可以將函式命名,先將函式命名為「前進」,並拉入直流馬達設定馬達控制號碼、旋轉方向以及速度。

組裝好FlipRobot後,將要控制的馬達號面向自己,會發現兩邊的旋轉方向不同,因為FlipRobot組裝時,兩顆馬達位置是對稱的,所以旋轉方向會不相同,以前進為例:直流馬達M1號向前運轉的方向是逆時針、直流馬達M2號向前運轉的方向是順時針。

完成建立新函式後,記得要將建立好的新函式指令拉入初始化或是重複執行的區塊中,如果少了這個步驟,會發現燒錄後機器人不會執行指令,這是因為程式目前只有告訴機器人,我們有了一個新功能做作「前進」,但是不會執行。

切換到Arduino原始碼的畫面中可以清楚看到,在程式上方已經定義好「前進」的功能,但是在setup()或loop()中沒有任何指令,所以機器人不會動;如果要讓機器人執行指令,必須將做好的新函式指令「前進」拉入初始化或是重複執行的區塊中;切換到Arduino原始碼的畫面,就會發現setup()或loop()中出現「前進」的指令,這樣機器人才會執行動作。

舉例說明:

前進1秒後,右轉0.5秒,接著停止1秒再左轉0.5秒。

❷到做些什麼,返回

執行完函式後會回傳一個數值。

舉例說明:

執行完函式,會回傳一個數值,執行完「前進」的指令後,會回傳的5這個數值,並將「5」從序列埠中顯示出來。

❸如果返回

只能放在函式中來使用,會判斷設定的條件是否成立,如果成立則立即回傳數值並中斷函式進行。

舉例說明:

只能在函式中使用,若放在函式以外的位置,會發現拼圖呈現灰底的狀態,表示無法使用;這一種函式的使用方法會進行條件的判斷,如果條件成立,會立刻中斷函式並回傳數值,以下圖為例:設定「前進」的函數回傳數值為5,在「前進」的函式中增加兩個判斷式,如果1>0的條件成立,回傳數值3、如果2>0的條件成立,回傳數值4,並設定初始化在序列埠印出「前進」的回傳數值;燒錄程式後會發現,序列埠中出現的回傳數值為3,代表函式進行到第一個判斷式【如果1>0的條件成立,回傳數值3】就中斷程式並回傳數值3;另外也可以發現重複執行中有另一個判斷函式為【如果7>8的條件成立,回傳數值9】呈現灰底,是因為沒有放在函式中,所以無法使用。

輸入輸出:

控制晶片板接收和發送的資料或訊號,例如:蜂鳴器、LED燈和其他晶片板上的原件、腳位…等。

❶高、低電位

控制訊號的電位,高電位代表放電、低電位代表不放電 。

❷腳位

在FlipRobot主控板上有很多的腳位可以使用,但有些已經被限定是某些元件的特殊腳位,例如:12號腳位用來控制蜂鳴器;但也有一些腳位沒有被限制,可以讓使用者設定,例如:7號、8號、A4、A5…等。

腳位用來接收或發送訊號,在FlipCode中,若有看到拼圖上有寫PIN代表的是腳位號碼。

在淺色框中的下拉式按鈕可以選擇不同的腳位號碼來控制腳位。

在腳位名稱上,也分為兩種類別:

  • 「數位腳位」:純數字表示,例如:7。

  • 「類比腳位」:字母A加上數字,例如:A4。

在FlipCode中,類比訊號可以被數位化、數位訊號可以類比化。

數位腳位:

常用1、0表示回傳的數值,1表示有回傳數值、0表示沒有回傳數值,所以只會出現有或沒有兩種答案,可以使用在電源有沒有被接通、感應器有沒有回傳值、LED有沒有亮燈…等使用。

舉例說明:

將10號腳位設定為高電位的數位訊號,如果10號腳位有通電回傳數值就會是1,執行直流馬達M1號以200的速度往順時針方向運轉;沒有通電回傳數值為0,執行直流馬達M1號不動。

類比腳位:

類比訊號可以有更多連續性的訊號,例如:超音波感應器偵測到的距離數值、電流大小、光線強弱…等,若要設定一個腳位為類比腳位,訊號範圍為0~1023。

舉例說明:

新增一個變數命名為【回傳值】,並賦予值為A3類比腳位回傳的數值;在新增另一個變數命名為【輸出值】,並賦予值為變數回傳值除以4(將數值0~1023縮小至0~255左右);設定5號腳位用類比化的方式,輸出變數【輸出值】的數值,延遲0.3秒後,在序列埠顯示目前變數【輸出值】的數;所以在序列埠中可以看到,5號腳位的數值開始會慢慢連續性的遞減,而這個數值是由A3腳位回傳再由5號腳位輸出所得。

❸蜂鳴器

控制蜂鳴器是否發出聲音、發出聲音的頻率及時間;在FlipRobot主控板上,有一個發聲裝置-蜂鳴器,我們可以透過不同的FlipCode拼圖來控制蜂鳴器發聲的行為。

簡單分為三種:發聲頻率、音階發聲、不發聲。

發聲頻率

下圖三種都須輸入發聲頻率,也就是蜂鳴器的聲音頻率,蜂鳴器會依照頻率的數值發出聲音,例如:頻率523為標準音Do;比較不同的是第一種需要選擇蜂鳴器的腳位,蜂鳴器的腳位為12號,若選擇了錯誤的腳位蜂鳴器則不會發出聲音;還有第三種蜂鳴器拼圖,多了持續時間的功能,表示聲音持續的時間,如果使用其他沒有持續時間的蜂鳴器拼圖,可以搭配延遲的拼圖來使用。

舉例說明:

三種蜂鳴器發出頻率523(Do) 0.5秒的使用方式。

音階發聲

這兩種是已經內建了Do、Re、Mi…等7個音。 使用者在淺色框中的下拉式按鈕可以選擇不同的音高。

舉例說明:

兩種蜂鳴器發出Do 0.5秒的使用方式。

不發聲

這兩種是用來控制蜂鳴器不發出聲音。

舉例說明:

兩種蜂鳴器發出Do 0.5秒後不發出聲音0.5秒的使用方式。

❹接收內建按鈕訊息

控制按鍵開關;在FlipRobot主控板右上方設有一個按鍵功能,可以使用接收內建按鈕的拼圖來控制按鈕在不同狀態下執行的指令;常用1、0表示按鈕的狀態,1表示按鈕按下(有回傳數值)、0表示按鈕沒有按下(沒有回傳數值) 。

舉例說明:

按下按鍵時,蜂鳴器發出Do的聲音,沒有按按鈕時,蜂鳴器不發出聲音。

❺LED

控制LED亮燈的狀態,在FlipRobot主控板上有兩種不同型態的LED燈,所以也使用了不同的程式拼圖來控制。

在FlipRobot晶片板中央有一顆能發出白光的LED燈,下方圖就是用來控制單顆LED燈亮燈或不亮燈,在淺色框中的下拉式按鈕,可以選擇控制高、低電位,高電位代表亮燈、低電位代表不亮燈。

舉例說明:

LED亮燈0.5秒後不亮0.3秒。

在FlipRobot主控板靠近超音波插孔的位置,有兩顆RGB LED燈,一般的LED燈只能發出一種光,但是RGB LED燈因為使用了RGB三原色的原理,所以可以透過RGB數值調出不同顏色的光;淺色框中的下拉式按鈕,可以選擇控制RGB LED燈號,以主控板為主,主控板的左方為RGB LED1號、右方為RGB LED2號。

舉例說明:

RGB LED 1號亮紅燈0.5秒後,亮綠燈0.5秒,再亮藍燈0.5秒。

文字輸出:

用來和其他晶片板或電腦進行溝通;在機器人的世界中,其實是使用0、1來進行溝通,我們所使用的數字、字串、圖形…等,都是由0、1構成的,而序列埠就是用來跟機器溝通用的模組。

❶序列埠可用

機器人在進行溝通時,會將收到訊息先儲存在一個暫存區中,而序列埠可用的功能就是用來判斷暫存區裡是否有任何訊息。

舉例說明:

判斷序列埠可用大於0的條件是否成立,用來判斷序列埠中是否有任何訊息。

❷序列埠讀取

負責判斷和讀取暫存區中收到的第一則訊息,因為機器人溝通時,可能會使用字串、數字、圖形…等不同方式來進行溝通,而序列埠讀取的功能就是用來判斷收到的訊息,是否和設定的條件符合。

舉例說明:

判斷暫存區的訊息的餘數值0的條件是否則立。

舉例說明:

判斷當暫存區有收到訊息時,執行判斷訊息如果等於字元A的條件成立,執行蜂鳴器發出Do的聲音;否則執行蜂鳴器發出Re的聲音。

發送訊息

以下為兩種發送訊息的方式,第一種以數字的方式發送訊息、另一種是以字元的方式發送訊息。

❸序列埠寫入

以數字的方式發送訊息,並將訊息經由序列埠傳給機器;在機器人的世界中,為了讓彼此溝通更方便,所以將某些常用的字元、圖案用數字碼的方式來代表,例如:字元「A」的數字碼是65;所以當序列埠發送數字訊息時,如果和已經被設定的字元或圖案相同,就會顯示數字碼所代表的字元或圖案。

❹清空暫存

將訊息暫存區的檔案清空。

❺序列埠印出

以字元的方式發送訊息,字元的意思就是文字,所以在傳送訊息時,不會再被轉為數字碼,例如:發送訊息65,在程式中顯示的會是傳送訊息字元’6’、字元’5’。

舉例說明:

開機後,序列埠寫入訊息數字碼65會顯示A;序列埠印出訊息66,會顯示字串66。

Last updated