Chrome Apps – Serial


20140327chrome_serial_arduino

Chrome Apps から USB シリアルを操作する
ソースは github で公開しています。

機能
serial / ledtoggle をベースに下記の機能を追加した。
(1) シリアルポートの選択
(2) ボーレートの選択
(3) テキストの送信

準備
(1) Arduino の13番ピンにLEDをつける。
(2) Arduino と MAC を USBケーブルで接続する
(3) サンプルスケッチ を書き込む。

アプリの操作
(1) シリアルポートとボーレートを選択する
(2) Open ボタンを押す
表示が Not Connect から Connected に変わる
(4) LED Test ボタンを押す
Arduino の LED が点灯する
(5) テキストを入力して Submit ボタンを押す
Arduino に送信され、Arduino からエコーバックされた文字列が表示される。

20140327chrome_serial_app


Arduino Serial


20140327arduino_serial_uno.

シリアルポートを使用した Arduino のスケッチです。
ソースは github で公開しています。

機能
(1) ボーレートは 115200 bps
(2) エコーバック
シリアルポートから受信した文字列を、エコーバックします。
3. LED テスト
13番ピンに LED を差します。
“1” を受信すると、LED が点灯します。
“0” を受信すると、LED が滅灯します。

20140327arduino_serial_sketch


ボクスケ を使ってみた


20140328voxke_apps 20140328voxke_web

ボクスケrinkak が提供している3Dモデリングのタブレット・アプリです。

3Dモデリングといっても、初心者向けの簡単なものです。
縦16マス×横16マス×高さ4マスのものしか作れません。
その代わりに操作は簡単で、タブレットのマス目を指でなぞるだけです。
小学生でも、お手本を見せるだけで、すぐに使えるようになります。

タブレット・アプリの他にクラウドサービスも併用します。
タブレットでは、3Dモデルを作成します。
そのデータをクラウドサービスに送って、3Dプリンタで扱えるモデル形式 (stl, obj) に変換します。
変換後のデータは、WEBサイトに掲載され、PCのWEBブラウザでダウンロード出来ます。
ダウンロードしたデータを、3Dプリンタに入力して製造します。
30分くらいで、4cm角 のものが完成します。
それに、鎖を通して、キーホルダーにしました。

20140328voxke_product

大人もはまります。
タブレットを指でなぞると、軽いクリック音と振動があります。
これがプチプチを潰すときのような心地良さになっています。
16×16×4 という制約の中で、どんなものが作れるか、というパズルに挑戦している感じりになり、長い時間触ってしまいます。


Chrome Apps を試す (Serial ledtoggle)


20140303chrome_serial_led

Chrome Apps から USB シリアルを操作する
Chrome Apps の大きな特徴として、PCのハードを制御できるようになっている。
サンプル にある serial / ledtoggle を試す。

準備
(1) Arduino の13番ピンにLEDをつける。
(2) Arduino と MAC を USBケーブルで接続する
(3) Arduino のサンプルにあるスケッチを書き込む。

ソースの変更
Chrome Apps のソースを1カ所変更する。
USB シリアルのデバイス名を変更する。

main.js

// const DEVICE_PATH = '/dev/ttyACM0';
const DEVICE_PATH = '/dev/tty.usbmodem***';

USB シリアルのデバイス名はコマンドで取得する。

$ ls /dev/tty.*
/dev/tty.Bluetooth-Modem	/dev/tty.Bluetooth-Serial-2
/dev/tty.Bluetooth-PDA-Sync	/dev/tty.usbmodem***
/dev/tty.Bluetooth-Serial-1

アプリの確認
coennected to : /dev/tty.usbmodem*** と表示される。
「Press me」を押すと、Arduino の LED が点灯する。
20140303chrome_serial_app


Android Wear が発表された


YouTube Preview Image

Google Grass と同じ音声入力みたいですね。
Google Grass のときは、日本人の英語を認識して貰えず、
「Take a picture」を何度も繰り返して、やっと写真が1枚撮れたものです。
今回はどこまで通用するかな。

開発者サイトはこちら
SDK のプレビュー版がダウンロード出来ます。

メディアの記事
Google、スマートウォッチOS、Android Wearを発表―最初の製品はLG ‘G’とMotorola Moto 360
グーグル、ウェアラブル製品向けOS「Android Wear」を発表–スマートウォッチからまずは展開
GoogleのウエアラブルOS「Android Wear」、LGやMotorolaがスマートウォッチを投入へ
Motorola、「Android Wear」搭載腕時計を今夏発売へ


Chrome Apps を試す (Hello World)


Chrome 開発者サイト に書いている手順で進めればよい。

Step 1: manifest を作成する
Step 1 から Step 4 はアプリの作成方法が書いてあるが、
面倒なので、Github からサンプルをダウンロードする。
そのうちの hello-world を試す。

Step 5: アプリを Launch する

(1) 拡張機能 API を有効にする
URL欄に chrome://flags を入力する。
20140301chrome_flags

(2) アプリをロードする
20140301chrome_icon_setting 右上の 設定アイコンから。
20140301chrome_extensions_index
20140301chrome_extensions_button 20140301chrome_extensions_apps
20140301chrome_extensions_list

(3) アプリを開く
20140301chrome_icon_apps 右上の アプリアイコンから。
20140301chrome_apps

アプリの動作確認
Hello World を表示するだけ。
20140301chrome_hello_world


ソフト・キーボードの画面表示


20140311potrait 20140311potrait_default

通常は、ソフト・キーボードは、元の画面の下側を隠すように、表示されます。
これは Pan and Scan と呼ばれるモードです。

下側にボタンなどを配置しているときは、ボタンが隠れて不便なときがあります。
AndroidManifest で Resize モードを設定すると、レイアウトファイルの layout_weight のところが調整されて、全体を表示することができます。

AndroidManifest.xml

<activity
	android:name=".ResizeActivity"
	android:windowSoftInputMode="adjustResize" >

layout/xxx.xml

<TextView 
	android:layout_width="fill_parent"
 	android:layout_height="0dp"
	android:layout_weight="1" />

20140311potrait_resize

しかし、横向き (landscape) のときは、常に画面全体にソフト・キーボードが表示される Full Screen モードになります。

20140311landscape20140311landscape_default

EditText に IME_FLAG_NO_FULLSCREEN を設定すると、Full Screen モードが解除されます。
なお、この設定は EditText を初期化するときに有効になるようです。
いったん EditText が表示されたあとで、設定しても効かなかったです。

mEditText.setImeOptions( 
	EditorInfo.IME_FLAG_NO_FULLSCREEN |
	EditorInfo.IME_FLAG_NO_EXTRACT_UI );

20140311landscape_no_fullscreen

サンプルコードは google code で公開しています。

参考
Onscreen Input Methods – Y.A.M の 雑記帳
オンスクリーン入力方式 ( IME ) – ソフトウェア技術ドキュメントを勝手に翻訳
LandscapeモードでのIMEの件 – アドエス小物日記


シューティング・ゲーム


Android のゲームアプリを作ってみました。

ソースは code.goolge で公開しています。

アプリの概要
いわゆるシューティング・ゲームです。
端末を左右に回して、敵のターゲットを補足します。
ロックオンしたときに、弾を撃つと撃墜できます。

コンセプト
誰でも遊べるものを
(1) ゲームのルール
シューティング・ゲームなら遊び方の説明は不要
(2) ゲームの操作
端末を回して、画面にタッチすると、いう簡単な操作で
 
遊び方
敵のターゲットを撃つと、敵のライフが減ります。
自分が撃たれると、自分のライフが減ります。
ライフがゼロになると終了します。

アプリの開始
最初に方位センサーの調整を行います。
画面をタッチすると、次に進みます。
20140308game_app_touchme

方位センサーの調整
壁の特定の1点を定めて、端末を回して、
左・右・上・下の順番にマークを合わせます。
画面をタッチすると、次に進みます。
20140308game_cal_left20140308game_cal_right
20140308game_cal_top20140308game_cal_bottom

ゲームの開始
ゲームが始まると、背景色が緑色に変わります。
弾を撃ったとき、撃墜したとき、攻撃されたときに、異なる効果音が鳴ります。
20140308game_start

敵のターゲット
ターゲットは、ピンクの丸で表示されます。
端末を回して、ターゲットを補足します。
20140308game_target

ロックオン
画面をタッチすると、弾を撃ちます。
ロックオンしたときに、弾を撃つと撃墜できます。
20140308game_lockon

敵の攻撃
敵に攻撃されると、画面が赤くなり、自分のライフポイントが減ります。
20140308game_attached


USB シリアル (mbed)


20140311usb_mbed

Android から USB シリアルで通信します。
USB シリアル機器には、 mbed を使います。

ソースコードは Google Code に置いています。

mbed の USB インタフェースは下記のとおりです。

VendorId : 3368
ProductId : 516

Interface 0
	Class : Mass Storage Devices Class
	Subclass : SCSI transparent command set
	Protocol : BBB Bulk-Only
Endpoint 130
	Direction : IN - device to host
	Transfer Type : Bulk
Endpoint 2
	Direction : OUT - host to device
	Transfer Type : Bulk

Interface 1
	Class : CDC (Communications Device Class)
	Subclass : ACM (Abstract Control Model)
	Protocol : AT Commands: V.250 etc
Endpoint 129
	Direction : IN - device to host
	Transfer Type : Interrupt

Interface 2
	Class : CDC (Communications Device Class) Data
	Subclass : Data Interface
Endpoint 133
	Direction : IN - device to host
	Transfer Type : Bulk
Endpoint 5
	Direction : OUT - host to device
	Transfer Type : Bulk

Arduino Uno と 同じコード では、うまくいかなった。
controlTransfer が失敗して、ボーレートの変更ができませんでした。
原因は、controlTransfer の index が 0 固定だったためです。
参考にしたコードは、どれもそうなっていたので。

Arduino Uno では、CDC ACM は、Interface 0 ですが。
mbed では、Interface 1 です。
そこで、CDC ACM の Interface 番号を取得して、controlTransfer の index に使用しました。

注記
index = Interface 番号というは、いまひとつ確信がないのですが。
USB の仕様には Interface を特定するものという記述があります。

参考
USB Control Transfers