■やったこと
ADK使ってAndroid端末側に構造体でデータを送りつける。
2012-02-22
2012-02-03
[arduino]Arduino Mega ADK or Arduino Megaでタイマ割り込みを使う
ATmega2560が搭載された、Arduino Megaでタイマ割り込みを使用する方法をご紹介します。
本題に入る前に少しお話があります。
以前、一定周期で処理を実行するためのスケッチ(ソースコード)を掲載したことがありますが、あのスケッチはやっつけなのでかなり問題があります。
これで、Armega2560が搭載されたArduino Megaでもタイマ割り込みの処理が実行されます。
こんな書き方も出来ます。
本題に入る前に少しお話があります。
以前、一定周期で処理を実行するためのスケッチ(ソースコード)を掲載したことがありますが、あのスケッチはやっつけなのでかなり問題があります。
delayを使用して時間調整を行なっていたため周期の精度が悪かったり、オーバーフローが発生するとおかしな挙動が発生したりします。
オーバーフローの方は簡単な演算で解決可能なのですが、精度の悪さはどうにも解決できませんでした。
フィードバックをかけて誤差を少なくしようと色々やってみたのですが、誤差を20マイクロ秒以下に抑えることができませんでした。
タイマ割り込みを使用せずに頑張った理由としては、外部のライブラリを使用せず、Arduinoの開発環境に標準で付いている機能のみでやってやろうという発想からでした。
ふと気が付いてみたら時間調整を行う処理だけで、それなりに行数を食ってしまいなんとも微妙な状態になってしまいました。
そこで、Arduinoの公式サイトにも掲載されているタイマ割り込みライブラリを使用して、タイマ割り込みを利用した周期処理を行うことにしました。
MsTimer2というライブラリで、以下のリンクに詳細が載っています。
ダウンロードしてArduinoの"libraries"フォルダに突っ込めば準備完了です。
サンプルコード(FlashLed")も付いているので、開発環境を立ち上げ早速実行してみます。
500msec毎にLEDが付いたり消えたりするはずです。。。はずでした。
試してみると分かりますが、ATmega2560が搭載された新しいArduino MegaではMsTimer2は使えません(2012/02/03現在)。
何故なのかというと、MsTimer2のソースコード"MsTimer2.cpp"の中で、CPU毎に処理が書かれているのですが、悲しいことにArmega2560の処理が無いからです。
しかし、ちょっといじるだけで使えるようになります。
"MsTimer2.cpp"の
となっている箇所全てを
と書き換えるだけです。
見にくいので、変更する場所だけを言うと
|| (__AVR_ATmega2560__)
を追記するだけです。
これで、Armega2560が搭載されたArduino Megaでもタイマ割り込みの処理が実行されます。
何故これだけで良いかというと、Armega2560はATmega1280のメモリが増えただけなので、レジスタの変更などは有りません。したがって、処理の内容はATmega1280のままで良いことになります。
再度、サンプルコードを実行してみると、今度はちゃんとLEDが付いたり消えたりするのが確認できると思います。
周期の精度はタイマ割り込みなので、言うこと無しです。
一定間隔で処理をする時は、こんな感じで書きます。
周期の精度はタイマ割り込みなので、言うこと無しです。
一定間隔で処理をする時は、こんな感じで書きます。
2012-01-26
[arduino][ADK][android]Arduino Mega ADKでDemoKitを試す
Arduino Mega ADKを購入しました。
せっかくなのでGoogleのDemoKitを試したいと思います。
以下の3つをダウンロード
せっかくなのでGoogleのDemoKitを試したいと思います。
以下の3つをダウンロード
- arduino-0023.zip
- adk_release_0512.zip
- CapacitiveSense003.zip
適当に解凍して、"ADK_release_0512"の中にある"AndroidAccessory"と"USB_Host_Shield"フォルダを"arduino-0023\libraries"フォルダの中に入れる。
CapacitiveSense003も"arduino-0023\libraries"フォルダの中に入れる(CapSenseに名前を変更する)。
Arduinoの開発環境"arduino.exe"を起動する。
Openから"adk_release_0512"の中にある"demokit.pde"を開く。
開いたスケッチ(ソースコード)のsetup関数内にあるinit_joystick( 5 );の行をコメントアウトします(理由は後ほど)。
後は、USBでArduino Mega ADKに接続して、アップロードするだけです(ドライバのインストールは必要です)。
Android側のアプリはマーケットで"DemoKit"と検索して適当にインストール。
こんな感じに繋いで、バッテリーの電源を入れれば、
ダイアログが出てくるので、適当にOKして
出来上がり。
何も部品を接続していないので、何もできません。
※init_joystick( 5 )をコメントアウトした理由
本来、ADKのサンプルアプリを動作させるには、Arduino Mega ADKの上にLEDやJoyStickなどが付いたIOボードが必要になります。
JoyStickが接続されていない場合、init_joystick( 5 );関数内で無限ループに陥ってしまいます。
そのため、init_joystick( 5 )をコメントアウトします。
全ての機能を試したい場合、株式会社アールティなどで販売されているボードを購入するのが簡単です。
以下、ミルヒと。
登録:
投稿 (Atom)