網頁最後修改時間:2018/08/02
PiFae Digital 在樹莓派作業系統的環境設定與軟體安裝是一連貫的步驟,請從"七部曲設置 PiFace Digital 擴充板" 開始。
Step 6:使用 Scratch 控制 PiFace 擴充卡
PiFace 可以使用 Scratch 控制的原因是來自於 Mesh,Mash 是一種可以讓 Scratch 與外部程式分享變數和使用外部程式偵測感測器的方法,通過這種方法 Scratch + Mesh 就可以與 PiFace 做溝通。
在 Scratch 安裝與設置 Mesh:
Mesh 在 Scratch 預設是關閉的,因此必須先叫出 System Browser ,選擇 "Scratch-UI-Panes" --> "ScratchFrameMorph" --> "menu/button actions" --> "addServerCommandsTo:",再修改其中文一段文字敘述,存檔之後,就可以開啟 Scratch 的 Mesh 功能。詳細的操作說明請參照下面的圖說:
按住鍵盤上的 Shift 鍵,再移動到滑鼠在螢幕左上角的 SCRATCH 的 R 字上方點擊滑鼠左鍵
R 點擊的位置 |
選擇 "turn fill screen off",讓編輯區的視窗不會自動延展
關閉編輯區視窗自動延展功能 |
視窗又方與下方會出現一個空白的區域,在空白區域 "Ctrl + 滑鼠左鍵" --> "open..." --> "browser" 就會叫出 system browser 視窗
叫出 World 選單,選擇 open... |
在 open 選單中,選擇 browser |
在 system browser 選擇 "Scratch-UI-Panes" --> "ScratchFrameMorph" --> "menu/button actions" --> "addServerCommandsTo:"
system browser,選擇 Scratch-UI-Panes |
system browser,繼續點選 "ScratchFrameMorph" --> "menu/button actions" --> "addServerCommandsTo:" |
在下方的文字中,找尋 t2 -> ture. 並將其修改為 t2 -> false.
修改 addServerCommandsTo: 的內容 |
在 system browser 編輯區空白處,"Ctrl + 滑鼠左鍵" 叫出選單並選擇 "accept(s)",在出現的文字欄中將名字的第一個英文字母大寫 (隨便寫也可以),再按下 "accept" 儲存變更,最後關閉 system browser
儲存變更 |
輸入名字的第一個英文字 |
到這邊就已經成功開啟 Mesh,只要按住 Shift 移動滑鼠到選單 Share (分享) 上點擊滑鼠左鍵,就會看到選單上多了兩個可選擇的項目 Host Mesh 和 join Mesh
成功開啟 Mesh |
但若是需要在下次再一次開啟 Scratch 時不需要再做設定,就要將現在的設定儲存成映像檔 (image)。
首先,修改好 system browser 裡的資料之後,按住鍵盤上的 Shift 鍵,再移動到滑鼠在螢幕左上角的 SCRATCH 的 R 字上方點擊滑鼠左鍵,選擇 "turn fill screen on"
turn fill screen on |
再開啟一次剛剛的選單,這次選擇 "save image for end-user",然後選擇 "Yes"
save image for end-user, Mesh enabled |
save image for end-user 確認視窗 |
上面的動作只是展示作法,根據我試過之後發現,這動作只要一做,我的 Scratch 就會黑成一片,無法動作也關不起來!您可以自己試試,成功了就恭喜你;但若是不成功,下面也有方法可以解決。
由於出貨是使用最新版本的作業系統,因此這個問題也是需要解決的!
下面我們將使用兩個例子說明如何使用 Scratch 控制 PiFace,一個是使用樹莓派本身控制 PiFac,另一個是在其他電腦上安裝 Sccratch 並設定好 Mesh 控制 PiFace.
在樹莓派的 Scratch 控制樹莓派的 PiFace (本地連線)
要解決在樹莓派裡 Scratch 開啟 Mesh 後無法執行的問題,請照下面的指令下載 "Scratch_Mesh_Enabled.image" 到 "/usr/share/scratch" 目錄下面。
使用時就是先將下面下載的檔案直接取代現有的 scratch.image 並更名再啟動 Scratch 就可以了
pi@raspberrypi ~ $ cd /usr/share/scratch pi@raspberrypi /usr/share/scratch $ sudo wget -O Scratch_Mesh_Enabled.image http://goo.gl/4VS7z --2013-02-08 23:09:50-- http://goo.gl/4VS7z 正在查找主機 goo.gl (goo.gl)... 74.125.31.138, 74.125.31.139, 74.125.31.100, ... 正在連接 goo.gl (goo.gl)|74.125.31.138|:80... 連上了。 已送出 HTTP 要求,正在等候回應... 301 Moved Permanently 位置: http://dl.dropbox.com/s/qune14a0o8weg64/Scratch.image [跟隨至新的 URL] --2013-02-08 23:09:50-- http://dl.dropbox.com/s/qune14a0o8weg64/Scratch.image 正在查找主機 dl.dropbox.com (dl.dropbox.com)... 204.236.234.79, 23.21.223.152, 50.19.81.238, ... 正在連接 dl.dropbox.com (dl.dropbox.com)|204.236.234.79|:80... 連上了。 已送出 HTTP 要求,正在等候回應... 200 OK 長度: 5677976 (5.4M) [text/plain] Saving to: `Scratch_Mesh_Enabled.image' 100%[=========================================>] 5,677,976 805K/s in 8.1s 2013-02-08 23:10:00 (685 KB/s) - `Scratch_Mesh_Enabled.image' saved [5677976/5677976] pi@raspberrypi /usr/share/scratch $ ls -l 總計 22260 drwxr-xr-x 3 root root 4096 12月 17 03:37 Help drwxr-xr-x 2 root root 4096 2月 3 00:13 locale drwxr-xr-x 5 root root 4096 12月 17 03:37 Media -rw-r--r-- 1 root root 5709320 2月 7 20:52 ni1Pu drwxr-xr-x 12 root root 4096 12月 17 03:37 Projects drwxr-xr-x 2 pi pi 4096 2月 6 22:04 Scratch -rw-r--r-- 1 root root 5653772 2月 7 21:22 Scratch.image -rw-r--r-- 1 root root 228 2月 20 2010 Scratch.ini -rw-r--r-- 1 root root 5677976 2月 8 23:10 Scratch_Mesh_Enabled.image -rw-r--r-- 1 root root 9695 2月 7 20:52 -v -rw-r--r-- 1 root root 5708080 2月 7 20:50 yQ44o pi@raspberrypi /usr/share/scratch $ sudo cp Scratch.image Scratch.orig.image pi@raspberrypi /usr/share/scratch $ ls -l 總計 27784 drwxr-xr-x 3 root root 4096 12月 17 03:37 Help drwxr-xr-x 2 root root 4096 2月 3 00:13 locale drwxr-xr-x 5 root root 4096 12月 17 03:37 Media -rw-r--r-- 1 root root 5709320 2月 7 20:52 ni1Pu drwxr-xr-x 12 root root 4096 12月 17 03:37 Projects drwxr-xr-x 2 pi pi 4096 2月 6 22:04 Scratch -rw-r--r-- 1 root root 5653772 2月 7 21:22 Scratch.image -rw-r--r-- 1 root root 228 2月 20 2010 Scratch.ini -rw-r--r-- 1 root root 5677976 2月 8 23:10 Scratch_Mesh_Enabled.image -rw-r--r-- 1 root root 5653772 2月 8 23:13 Scratch.orig.image -rw-r--r-- 1 root root 9695 2月 7 20:52 -v -rw-r--r-- 1 root root 5708080 2月 7 20:50 yQ44o pi@raspberrypi /usr/share/scratch $ sudo mv Scratch_Mesh_Enabled.image Scratch.image pi@raspberrypi /usr/share/scratch $
檔案有 5MB 大小,請耐心等待!!
更名完成後,就可以在樹莓派裡開啟 Scratch,接下來的啟動與 Scratch 程式撰寫都與下面的過程一樣,請繼續往下做!
在 Windows 的 Scratch 控制樹莓派的 PiFace (遠端連線)
先將 Scratch 的 Host Mesh 打開,這樣才能接收從樹莓派傳過來的 PiFacce 狀態。按住 "Shift" 再移動滑鼠到 Share 選單上點擊滑鼠左鍵,選擇 "Host Mesh",並記住此時出現的視窗裡的 IP 位址
Scratch - "Shift + 點擊 Share" 選擇 Host Mesh |
到樹莓派裡輸入下面指令,就會開始將 PiFace 的狀態傳送出來,這就可以開始 Scratch 的程式了
pi@raspberrypi ~/piface/scratch $ python scratch_handler.py 192.168.1.9
此時在 Scratch 中,就可以使用 PiFace 所傳送出來的輸出與輸入的狀態,不但可以讀取也可以控制,有
輸入:
- piface-input1
- piface-input2
- ...
- piface-input7
- piface-input8
輸出:
- piface-output1
- piface-output2
- ...
- piface-output7
- piface-output8
下面我們舉一個範例來做示範。
Scratch 範例:
開啟 Scratch,點擊左上角的' "Control" 圖示,下方就會出現相對應方塊圖。選擇跟下方一樣的圖示 "When ... clicked"、"forever" 和 "if ... else" 照位置排上
Scratch - Control Block |
點擊 "Opeators" 圖示,再拖拉下方方塊中的 "... = ..." 在 "if ... else" 的條件判斷式空格上
Scratch - Operators |
點擊 "Sensign" 圖示,再拖拉下方方塊圖示中的 "Slider sensor value" 在條件判斷式第一個空格上
Scratch - Sensing - 1 |
點擊 slider 右邊的小圖示叫出下拉選單,選擇 "piface-input1" 並在條件判斷式第二個空格中填上 1
Scratch - Sensing - 2 |
Scratch - Sensing - 3 |
點擊 "Variables" 圖示,再點選下方 "Make a variable" 圖示,這時在出現的對話視窗輸入 "piface-output1"
Variables - Make a variable |
完成變數名稱設定之後,就會有下方幾個可用的方塊出現
Variable - Make a variable - piface-output1 |
拉出 "set piface-output1 to 1" 在 "if ... else" 方塊的 if 中間插入;拉出 "set piface-output1 to 0" 在 "if ... else" 方塊的 else 中間插入
Variable - Make a variable - 插入 piface-output1 |
點擊 "Motion" 圖示,再點選下方 "turn 15 degree" 圖示
Scratch - Motion |
按下 螢幕右上方的綠色小旗子就會開始執行 Scratch 程式。當您按下 PiFace 的 S1 觸動開關時,就會看到螢幕上那隻貓開轉動, PiFace 的 LED 亮起,繼電器激磁;放掉開關之後就什麼都沒有了!
Scratch 對於學習程式語言與邏輯關鏈都是很不錯的軟體!尤其是對於邏輯觀念的建立很有幫助,有圖形與實際硬體的輔助,相信很容易引起學習興趣的!
沒有留言:
張貼留言
留言屬名為"Unknown"或"不明"的用戶,大多這樣的留言都會直接被刪除掉,不會得到任何回覆!
發問問題,請描述清楚你(妳)的問題,別人回答前不會想去 "猜" 問題是什麼?
不知道怎麼發問,請看 [公告] 部落格提問須知 - 如何問問題 !