2013年2月8日 星期五

[PiFace Digital 六部曲] 使用 Scratch 控制 PiFace 擴充卡

網頁最後修改時間: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 就會關閉並將 image 存檔。若是跟我一樣的情況,就會整個 Scratch 掛掉,連關都關不起來,這情形現在還沒弄出來要怎麼解決。不過官方釋出的作業系統 (2012-09-18-wheezy-raspbian) 是已經設定好給 PiFace 用的環境,所有應該有的軟體與設定都已經預先設定好了,它的 scratch 也是可以用的,需要的話可以上這裡去下載 (官方作業系統)

上面的動作只是展示作法,根據我試過之後發現,這動作只要一做,我的 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"或"不明"的用戶,大多這樣的留言都會直接被刪除掉,不會得到任何回覆!

發問問題,請描述清楚你(妳)的問題,別人回答前不會想去 "猜" 問題是什麼?

不知道怎麼發問,請看 [公告] 部落格提問須知 - 如何問問題 !