目次 #contents() *過去の日記 [#b912d6a2] -[[merl時代>http://merl.ec.t.kanazawa-u.ac.jp/diary_private/index.php?y_kawasaki]] *6月3日(月) [#gdc4bfb3] 久々すぎてごめんなさい。 **Arduino赤外線リモコンシールドの観察結果 [#w71de956] -SONYフォーマット(の受信)はダメっぽい。 -他フォーマットではヘッダー(リーダー)部分がON、OFFあるのに対して、SONYフォーマットはONしか無いので、うまく読み取れていない。 -送信はOFF部分をゼロにすればいいかもなので、理想信号算出して試してみる。 *1月23日(水) [#b94f3d3c] **PSoC Designerでのエラー [#j5406653] -リモコンシールドを使うためにPSoC1duinoを使用することにした。 -これまでPSoC Designer5.1しかインストールしていなかったので、自前のPC(win7,64bit)に5.3を導入。 チュートリアルなど参考にしつつ、サンプルをビルドしようとすると以下のようなエラーが make: *** No rule to make target `C:\users\kawasaki\DOCUMENT~1\PSOC~', needed by `lib/obj/led.o'. Stop. -調べてみたところ、ファイルやフォルダ名の長さから出るエラーらしい。 -そこで、プロジェクトの実行フォルダを、 --「\C:\Users\kawasaki\Documents\PSoC Designer 5.3 Projects」から --「\C:\Users\kawasaki\Dropbox\PSoC」に変更したところ、エラーなくビルド出来た。 -研究室のPC(XP,32bit)で、同じ手順でプロジェクトをcloneで新規作成、ビルドしたがエラーは出なかった。 --むしろ「C:\Documents and Settings\ykawasaki\My Documents\PSoC Designer 5.3 Projects」とフォルダ名がより長い状況でエラー無し -よって、64bitOSだと出やすいエラーなのでは **リモコンシールド [#aacba2f9] 東京デバイセズのArduino赤外線リモコンシールドのテスト -とりあえず、シールドからの信号をPCで確認 -最初は??となるが、データシートに記載されているIRパケット仕様とにらめっこしながら電卓を叩くと、以前までに記録してた信号とほぼ一致。 -今まで確認に手間がかかっていた信号の幅やデータビットが分かりやすくまとめて出力され、とても便利! *12月6日(木) [#q0102feb] 結局久々の更新 **XBeeとの通信による画面切り替え [#ieac8ba4] がやっと実装できた。詰まってた問題点幾つか() ***intentで受け渡せるデータの限界 [#w113e5c8] -まず、XBeeからの接続要求を受け取り、要求先のIDに合わせた画面(Activity)を起動するサービスクラスを作成 -serversocketにXBeeからの接続要求→新たなsocketを用意して接続→通信可能→そのままリモコン画面となるActivityを立ち上げたかったが、 -intentの仕様上、socketまるごと渡せなかったので、IPだけ渡してActivityの方で改めて接続という回りくどい仕様に -そのため、サービスとアクティビティ間のやり取りが必要になるので、ブロードキャストレシーバを実装 ***呼び出し場所 [#sbd0990c] -画面切り替え時にActivityの破棄も行いたいので、startActivityForResult()を使うことに -どうやらActivityクラスの中でしか使えないらしく、MainActivityクラスの中にintentを渡せばstartActivityForResult()でActivityの起動と破棄を行なってくれるクラスを作成 -それをブロードキャストレシーバ内で呼び出して使おうと思ったが、呼び出し元のレシーバが別ファイルであったためか、動作させられず --C的間隔でホイホイ呼びだそうとしてもダメってことは多々…気をつけよう --contextなどの辺を気にしながら調整してみたが、結局内クラスにするのが一番わかりやすくて良いので -ブロードキャストレシーバもMainActivity内のクラスとして実装。 --無事に呼び出しに成功 *** android.os.NetworkOnMainThreadException [#u05bcde4] -ここまでで -Service --XBeeからの接続要求&機器ID送信 --仮接続 --socketからIP抜き出し&機器ID抜き出し --ブロードキャストレシーバにIPとIDを送信 -ブロードキャストレシーバ(MainActvity内) --IDから開くべきActivity(画面)を選択 --startActivityForResult()で起動。intentを用いてIP情報受け渡し(前に開いているActivityは破棄) -Activity(リモコン画面) --IPと決め打ちのポートを使ってXBeeと接続。通信。 まで来ていて、ボタンを押したらリモコン信号を送信というところで~ 「android.os.NetworkOnMainThreadException」というエラーが~ なんやらほいとグーグル先生に聞いてみたところ、Android4.0以降ではネットワーク通信のソースが書いてあるとエラーが出るとか… -対策は簡単で、Androidマニフェストファイルの~ android:targetSdkVersion="15"を変えてやればいいと(sdk15は4.0)~ 今回は最低sdkを2.2(sdk8)にしているのでそれに合わせて8に変更したところ、エラーは消え問題なく通信が出来た。~ やっとここまで~ 今後はUI、データベースの利用、リモコン信号学習など…あとしゅーかつ。 *10月17日(水) [#d4d955b9] **リモコン [#h90a2d4b] PSoCで受信したデータを元にプロジェクターをリモコン操作出来るか実験した -相変わらずONには出来るが、OFFには出来ない -プロジェクターが起動していると外乱をまき散らしているのか、OFF判定は厳しいのか・・・ --信号データの見直し、回路の見直しなどが必要 -Arduinoのシールドを使うことに --PSoC互換ボードを借りて(作って?)試してみる が、一旦回路は置いといて(ある程度並行はしたいが)、先にAndroidアプリの基本形を固めてしまいたい。 -Android側をサーバにして、XBeeから通信するテストの第一段階は成功 --参考ページ→[[http://www.atmarkit.co.jp/fjava/column/koyama/koyama15_1.html]] --次はリモコン信号を想定した長い信号と双方向のやり取りをテストする。 --そのためにプログラム改良が必要 *10月12日(金) [#b8c2a601] **学習リモコン機能 [#rd5ec01a] 前にちょっと試したときは、あまりいい結果が得られなかったので後回しにしていた学習機能。~ -他のとこでも詰まる原因になっていたUARTの送信タイミングを変えることで、なかなかいい結果が得られることが判明。 -いつもC言語とかの感覚で適当なところに挟んでしまうので、今後は十分気をつけたい -しかし、arduinoのリモコンシールドが届いたタイミングで気づくという… -これで試してみてPSoCで行けそうなら、もったいないがPSoCのままで。 --やはり難しそうだったら、Arduinoにシフト 今後の課題を整理 -PSoCで学習機能(リモコン信号を取得、Androidに転送)が出来るか --出来なかったら、arduino -AndroidとXBee間の通信方法の変更 -AndroidアプリのUI関係整備 -Androidで操作履歴の保存 -Androidアプリで操作履歴をUIに反映 上2つを取組中。 学習機能が出来るとして、データベースに保存などを実装する必要があるので、さっさとAndroidに集中できるように。 *10月1日(月) [#b25a9992] ifDLになってから初めて更新する…^^; 必要なことはノートと頭にメモってたのであまり使わなかった罠… 後期はメモ程度でも少しずつ・・・ **通信テスト [#c178d7f4] ものづくりの裏ですこしずつ進めていたプログラムの改良。 -PCとマイコンで通信がうまく行ってなかった原因はボーレートを下げることで解消された。~ -そのままAndroidとマイコンの間でもbyte型での通信は成功~ 次の改良点は、リモコン信号のデータとしてbyte型(8bit)では足りない数値を送りたいので、マイコン側の受信プログラムの改良。~ 1データ2byteで送りつけて受信側でまとめてintに入れるとか。 *4月9日(月) [#w076d5c4] #pcomment(reply)