工具列說明(邏輯、運算、內部元件)
Last updated
Last updated
可設定不同的條件和判斷,讓機器人有系統性的進行思考,就像我們在生活中,面對不同的問題、情境而進行思考,例如:看到紅燈停、聽見鈴聲就回教室…等。
當所設定的條件成立時,就會執行指定的動作。
舉例說明:
如下圖,如果超音波感應器回傳的偵測距離小於15公分的條件成立時,執行蜂鳴器發出Do的聲音。
點選左上方藍色小齒輪,將需要使用的判斷式拉入右方【如果】的框中,即能增加或改變邏輯判斷的條件和形式。
邏輯判斷共有「三種」條件設定的型態:
如果…執行
如果…執行…否則
如果…執行…否則如果…執行。
只能設定一種條件,當條件成立執行動作。
舉例說明:
如下圖,如果超音波感應器回傳的偵測距離小於15公分的條件成立時,執行蜂鳴器發出Do的聲音。
能設定兩種條件:成立、不成立。當設定條件成立時,執行動作,否則執行條件不成立的動作。
舉例說明:
如下圖,如果超音波感應器回傳的偵測距離小於15公分的條件成立時,執行蜂鳴器發出Do的聲音,否則執行蜂鳴器發出Re的聲音(表示超音波感應器的偵測距離大於等於15公分)。
可以設定兩種以上的條件,如果有設定的條件成立時,會執行所設定的動作。
舉例說明:
如下圖,如果超音波感應器回傳的偵測距離小於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亮燈的狀態,在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。