0

Arduino Microをキーボードにする

LeonardとMicroはATmega32U4が使われていて、これがキーボードとマウスとしても認識されてる。
http://arduino.cc/en/Reference/MouseKeyboard

センサー読んで「明るい」「暗い」と書くキーボード

void setup(){
pinMode(13, OUTPUT);
Keyboard.begin();
}

void loop(){
if(analogRead(0) > 100){ // analog 0に明るさセンサ
digitalWrite(13, true);
Keyboard.println("akarui");
}
else{
digitalWrite(13, false);
Keyboard.println("kurai");
}
delay(1000);
}

beginしてprintlnするだけで書ける。とてもかんたん。

0

on :digital_read / on :analog_read

Ruby用Arduino Firmataライブラリにanalog_readとdigital_readの値が変わった時のイベントつけた


ふつうこうやってアナログ0番ピンをanalog_readするけど

require 'arduino_firmata'

arduino = ArduinoFirmata.connect
puts arduino.analog_read 0 # => 0 ~ 1023


これでアナログ値が変わった時にイベントが起こる
arduino.on :analog_read do |pin, value| # analog_read event
if pin == 0
puts "analog pin #{pin} changed : #{value}"
end
end



同様にdigital_readもHIGH/LOWが切り替わった時のイベントがとれる
arduino.pin_mode 7, ArduinoFirmata::INPUT

arduino.on :digital_read do |pin, status| # digital_read event
if pin == 7
puts "digital pin #{pin} changed : #{status}"
end
end


イベント管理はNode.jsのEventEmitterが便利だったので、それのRuby版を使ってる

0

ArduinoMicro買った

去年12月に発売したMicro買った http://arduino.cc/en/Main/ArduinoBoardMicro


Leonardと同じくATmega32U4のUSBシリアル機能(CDC/ACM)を使っているので、マウスやキーボードになれる


小さい
ArduinoMicro
ArduinoMicro


adafruitで買った。

3人で3枚買って送料シェアさせていただいたので1枚2400円ぐらいだった。3週間ぐらいで届いた気がする。


マウスやキーボードとしても認識されるぶん、Android版Firmataライブラリで使っているusb-serial-for-androidというライブラリでデータがreadできない。
digitalWrite, analogWriteは動くけどdigitalReadとanalogReadが動かない。
ちょっと調査してるけどむずかしい。


Ruby版Firmataはばっちり動いた。

0

コミケ情報

同人誌を書きました。
3日目(31日) 東ピ-55b 電脳学論の会です。

http://gakuron.github.com

・モンテカルロ法 in Stat
・Suffix Arrayを用いた全文検索インデックスについて
・RubyやAndroidでArduino Firmataする
みたいな内容で56ページ、500円です。

0

Androidのライブラリを作るときのメモ

次にまたAndroid用のライブラリを作るときのために、Android版Arduino Firmataを作った時に色々やった事をメモする。
最終的にCUIだけで全部ビルドしてリリースできるようになったし、rubygemなみにメンテしやすい構成ができたと思われ

ソースはここに公開してる https://github.com/shokai/ArduinoFirmata-Android


問題

EclipseでAndroidプロジェクトを作って、パッケージエクスプローラのフォルダを右クリックして「エクスポート」からjarファイルが作れる。プロジェクトの中で使っているファイルの一部分だけをライブラリとして切り出せる。


でも
  • jarに切り出すリリース作業をGUIでやるとミス起きそう
  • gitで管理しにくそう
  • jarにREADMEとかを含めるのが面倒
  • ライブラリの性質上実機で動作確認しなければならず、手元のMacで自動テストできない
  • 作ったjarを複数のサンプルアプリで動かすのが面倒
  • usb-serial-for-androidというgoogle製ライブラリを使うが、リポジトリに含めたくないのでgit submoduleで読み込みたい
などの問題があって、これは継続的にメンテするのが面倒くさそうだし、半年ぶりに更新する時に手順を全部忘れたりしそうだなあと思った。
rubygemみたいに久しぶりにメンテしても普通にリリースできる環境を作りたい。


Eclipseやめてターミナルでantとmakeとemacsで作ることにした。
Eclipseは適当に書いても足りないクラスをimportしてくれたり、アプリの画面をドラッグアンドドロップで作れるけど、ライブラリを作る時には意味ない。


開発環境

MacのターミナルとEmacsでAndroidアプリを作る環境を整える。
橋本商会 » Android開発環境をインストールしなおした
橋本商会 » emacsでAndroidのAPIも入力補完する


フォルダ構成


こんな感じ
├── History.txt
├── LICENSE.txt
├── Makefile (これ重要!)
├── README.md
├── arduino-firmata.jar (リリース版jarファイル)
├── samples (サンプルアプリを入れる場所)
│   └── FirmataSampleApp(サンプルアプリ)
│   ├── AndroidManifest.xml
│   ├── Makefile (これも重要!)
│   ├── libs
│   │   ├── arduino-firmata.jar (実は../../../arduino-firmata.jarへのシンボリックリンク)
│   │   └── usb-serial-for-android-v010.jar (これは実体)
│   └── (略)
├── src
│   ├── com
│   │   └── hoho(make initするとsubmoduleからコピーされてくるが、git ignoreされてる)
│   │   └── android
│   │   └── usbserial
│   └── org
│   └── shokai
│   └── firmata(ライブラリ本体)
│   ├── ArduinoFirmata.java
│   ├── ArduinoFirmataEventHandler.java
│   ├── ArduinoFirmataException.java
│   └── Error.class
└── usb-serial-for-android (git submodule。make initすると最新版をpullしてくる)


arduino-firmata.jarのビルド方法


Android SDKへのクラスパスを通して
% export CLASSPATH=$CLASSPATH:/usr/local/var/lib/android-sdk/platforms/android-13/android.jar
% export LC_ALL=en

ビルドする
% make init
% make

これを実現するMakefile
all: build

init:
cd usb-serial-for-android &&\
git pull origin master &&\
cd ../ &&\
cp -R usb-serial-for-android/UsbSerialLibrary/src/com src/

compile:
cd src &&\
javac org/shokai/firmata/ArduinoFirmataException.java &&\
javac org/shokai/firmata/ArduinoFirmataEventHandler.java &&\
javac org/shokai/firmata/ArduinoFirmata.java

build: compile
cd src &&\
jar cvf arduino-firmata.jar ./org &&\
jar uvf arduino-firmata.jar ../README.md &&\
jar uvf arduino-firmata.jar ../LICENSE.txt &&\
jar uvf arduino-firmata.jar ../History.txt &&\
mv arduino-firmata.jar ../

make initでsubmoduleのusb-serial-for-androidをgoogle codeのgitからpullしてきて、必要なソース(com.hoho.android.usbserial)だけsrcにコピーする。
コピーされたソースコードは.gitignoreに書いてあるのでコミットされない。

make buildでライブラリを全部コンパイルしてjarを作って、READMEやLICENSEを追加してルートディレクトリに置く。
これをgithubのmasterブランチにpushすると、github pagesで作ったArduino Firmata on Androidのページのチュートリアルのところに出るようになってる。


サンプルアプリのビルド方法

samples/FirmataSampleApp/ に移動して、
% make setup
で自分のAndroid開発環境の設定が読み込まれる


% make
% make install
これでサンプルアプリがインストールされる


Makefile
all: clean build
setup:
android update project --path `pwd` --name 'FirmataSample'
build:
ant debug
install:
adb install -r bin/FirmataSample-debug.apk
uninstall:
adb uninstall org.shokai.firmata.sample
logcat:
adb logcat | grep firmata
clean:
/bin/rm -r -f bin/classes

毎回.classファイルを削除してからビルドしている。
ant debugはソースのjavaファイルが更新された時のみ.classファイルに新しくコンパイルしなおすので、
毎回消してやらないとarduino-firmata.jarだけが更新された時に正しくビルドされない。

libsディレクトリにarduino-firmata.jarがあるが、これはルートディレクトリへのシンボリックリンク。
usb-serial-for-android.jarは http://code.google.com/p/usb-serial-for-android/からダウンロードしてきたもの。

antをmakeで使うのはなんかよくわからない気もするが、まあいいや。


更新作業

githubのissueを立てて、要求とおおまかな設計を書く。
ローカルでissue名のブランチを切って、commitメッセージの最後に#7とかissue番号を入れてcommitする。
githubにpushするとissueのページに書き込まれるので進捗が管理しやすい。
機能が完成したらmasterブランチにmergeする。



リリース作業は
History.txtにこれまでのcommitメッセージまとめを書いて、
ArduinoFirmata.javaの定数VERSIONを書き換えてからjarにビルドしなおして、
git tagをうってgithubにpushする。

だいたいこんな感じか。