PhratchでLEDをピカピカ光らせる

# PhratchでLEDをピカピカ光らせる

*気分を変えて別な感じの投稿をしてみます。予定していたRDBの話は別の機会に投稿します。*

Smalltalkを利用するユーザーの中には、Smalltalkの世界で完結するだけではもの足りず、Smalltalkのダイナミックな開発環境を活用しながら、外部世界、現実世界とつなげ、ロボティックス分野や教育現場への利用に挑戦する方がいらっしゃいます。このAdvent Calenderでも、[@EiichiroIto](http://oohito.com/nqthm)さんが12/12の投稿[Pharoでフィジカルコンピューティング(2)](http://oohito.com/nqthm/archives/2568)で、Pharo SmalltalkとArduinoの接続方法を紹介されておりました。また、[@maeda_](https://twitter.com/maeda_)さんが、昨日(12/18)[Phratch（ScratchのPharo移植版）の紹介](http://qiita.com/maeda_/items/7f75307df5fc5efc3dcf)で、ScratchをPharoに移植した「Phratch ( http://www.phratch.com/ )」が紹介されました。そこで今日はPhratchでArduinoに接続して、LEDをピカピカ光らせてみます。*今はこれが精一杯（ルパン風）。* 

ちなみに私はハードウェアについては素人です。*学生のころ電子回路について少しだけ学びましたが忘れてしまっている。*

# 必要なもの
* MacまたはPC
* Pharo Smalltalk 3.0
* Arduino （今回はArduino Uno）
* ArduinoとMacをつなげるためのUSB
* LED（なければ、Arduino Unoの標準のランプで代用）
* ハードウェアをいじる勇気（怖くない、怖くない・・・きっと）

# Phratch インストール
昨日(12/18)の記事を参考にインストールをしてください。

[Phratch（ScratchのPharo移植版）の紹介](http://qiita.com/maeda_/items/7f75307df5fc5efc3dcf#%E5%B0%8E%E5%85%A5%E6%89%8B%E9%A0%86)


#Arduinoプラグインのインストール
「記載漏れ」でした。ご指摘ありがとうございます。[@maeda_](https://twitter.com/maeda_)さん

PhratchとArduinoを接続するにはプラグインをインストールします。インストールは画面上部のメニューの「AddOns」より「ArduinoForPhratch」を選択します。少し時間がかかりますが、プラグインが自動的にインストールされます。

![スクリーンショット 2014-12-26 9.41.53.png](https://qiita-image-store.s3.amazonaws.com/0/18287/7bf193b9-c79d-6077-ac45-3f11a547a23a.png)


# Arduinoとの接続確認

[Pharoでフィジカルコンピューティング(2)](http://oohito.com/nqthm/archives/2568)を参考の情報をもとにArduinoの準備をします。 **Firmataを忘れないようにしましょう。**
PharoとArduinoの動作確認をします。今回は私が持っているArduino UnoをUSB接続します。

USB接続をしているデバイスの名前をチェックします。（Macの場合）

```bash
$ ls /dev/*usb*
/dev/cu.usbmodem1421	/dev/tty.usbmodem1421
```
詳しくないのだが、Unixの伝統的に /dev/tty.* は受信用、/dev/cu.* が発信用というのがあるらしい。

デバイス名が分かりましたので、PharoからArduinoに接続をしてみます。以下のコードを実行。

```smalltalk
"Connection"
arduino := Arduino on: Firmata new.
arduino connectOnPort: '/dev/cu.usbmodem1421'.
arduino isConnected."接続されたかどうか確認"
```

それでは、LEDを点滅してみます。LEDが無い方は、Arduinoのボードに付属の13Pin接続のランプを用います。

```smalltalk
"Led (digital output)"
led := LightEmittingDiode new.
led attach: (arduino digitalPin: 13).

```

10回LEDをピカピカ光らせます。

```smalltalk
"10回LEDを点滅させる"
10 timesRepeat: [  
	led value: 1.
	(Delay forMilliseconds: 500) wait.
	led value: 0. 
	(Delay forMilliseconds: 500) wait.].
```

![IMG_0177.jpg](https://qiita-image-store.s3.amazonaws.com/0/18287/132ae770-b94a-3710-02d6-b48aae52669b.jpeg)


処理が終わったら、Arduinoとの接続を閉じます。忘れないように実行しましょう。

```smalltalk
arduino disconnect.
```

# Phratchの起動
いよいよ本番のPhratchでArduinoを操作してみましょう。Phratchを起動します。

```smalltalk
PhratchFrameMorph open.
```

![a PhratchFrameMorph(5591531.jpeg](https://qiita-image-store.s3.amazonaws.com/0/18287/67a5f181-a5c2-d0e5-c244-610761526f6f.jpeg)

# PhratchからArduinoに接続する
1. [New Sprite]をクリック
![スクリーンショット 2014-12-14 16.00.51.png](https://qiita-image-store.s3.amazonaws.com/0/18287/aab96ee5-1fba-a8b0-8200-819ddf35d152.png)

2. [create PhratchSpriteArduinoMorph]をクリック
![スクリーンショット 2014-12-14 16.02.38.png](https://qiita-image-store.s3.amazonaws.com/0/18287/9e2b2635-8096-43cf-862d-0eeff5513108.png)

3.Stage内のArduinoを選択
選択するとArduinoに関するタイルが表示されます。

![スクリーンショット 2014-12-14 16.03.13.png](https://qiita-image-store.s3.amazonaws.com/0/18287/9725ce8c-fd66-5039-c70e-cac34123ed84.png)

今回は、先ほど実行した10回LEDをピカピカ光らせるのをPhratchでやってみます。ビジュアル言語でほとんど直感的に操作できますが、外部世界との接続のタイルだけは少し知識が必要な気がしました。 *connectタイルのArduinoの選択および接続ポートの指定は知らないと若干難しいかもしれません*

![スクリーンショット 2014-12-14 16.24.56.png](https://qiita-image-store.s3.amazonaws.com/0/18287/38914c2a-764c-aa54-bfdb-543726ab21b5.png)

プログラムは以下の感じです（ビジュアル言語なので画面キャプチャ）。
![スクリーンショット 2014-12-14 16.24.56 _2.png](https://qiita-image-store.s3.amazonaws.com/0/18287/13778e53-8e07-6224-b410-813f97745874.png)

あとは数値を変えたり、ArduinoのアイコンをLEDの点灯と合わせて動かしてみると面白いかもしれません。
![IMG_0179.jpg](https://qiita-image-store.s3.amazonaws.com/0/18287/a93a2434-e084-7986-89e8-c621b237a517.jpeg)


# ご紹介
[@maeda_](https://twitter.com/maeda_)さんが発起人の名古屋界隈のプログラマ集団 DyNagoyaでは、201411月よりPhratchをArduinoに連携したりやAndroid上で動かすことに挑戦しております。ご興味があるかは参加してみてはいかがでしょうか。

DyNagoya イベント告知ページ
http://dynagoya.doorkeeper.jp/

# Phratchの開発協力
[@janniklaval](https://twitter.com/janniklaval) さんより以下のツイートがありました。
Phratchにご興味があるかたは是非ご協力ください。

```text
Yes we are looking for Japanese version and an Arduino version too. If someone want to help :)
````
https://twitter.com/janniklaval/status/544466925154095104
 
# 参考
Phratch
http://www.phratch.com/

Pharoでフィジカルコンピューティング(2)
http://oohito.com/nqthm/archives/2568

Phratch（ScratchのPharo移植版）の紹介
http://qiita.com/maeda_/items/7f75307df5fc5efc3dcf