目次

過去の日記

1月23日(水)

PSoC Designerでのエラー

  • リモコンシールドを使うために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だと出やすいエラーなのでは

リモコンシールド

東京デバイセズのArduino赤外線リモコンシールドのテスト

  • とりあえず、シールドからの信号をPCで確認
  • 最初は??となるが、データシートに記載されているIRパケット仕様とにらめっこしながら電卓を叩くと、以前までに記録してた信号とほぼ一致。
  • 今まで確認に手間がかかっていた信号の幅やデータビットが分かりやすくまとめて出力され、とても便利!

12月6日(木)

結局久々の更新

XBeeとの通信による画面切り替え

がやっと実装できた。詰まってた問題点幾つか()

intentで受け渡せるデータの限界

  • まず、XBeeからの接続要求を受け取り、要求先のIDに合わせた画面(Activity)を起動するサービスクラスを作成
  • serversocketにXBeeからの接続要求→新たなsocketを用意して接続→通信可能→そのままリモコン画面となるActivityを立ち上げたかったが、
  • intentの仕様上、socketまるごと渡せなかったので、IPだけ渡してActivityの方で改めて接続という回りくどい仕様に
  • そのため、サービスとアクティビティ間のやり取りが必要になるので、ブロードキャストレシーバを実装

呼び出し場所

  • 画面切り替え時にActivityの破棄も行いたいので、startActivityForResult?()を使うことに
  • どうやらActivityクラスの中でしか使えないらしく、MainActivity?クラスの中にintentを渡せばstartActivityForResult?()でActivityの起動と破棄を行なってくれるクラスを作成
  • それをブロードキャストレシーバ内で呼び出して使おうと思ったが、呼び出し元のレシーバが別ファイルであったためか、動作させられず
    • C的間隔でホイホイ呼びだそうとしてもダメってことは多々…気をつけよう
    • contextなどの辺を気にしながら調整してみたが、結局内クラスにするのが一番わかりやすくて良いので
  • ブロードキャストレシーバもMainActivity?内のクラスとして実装。
    • 無事に呼び出しに成功

android.os.NetworkOnMainThreadException?

  • ここまでで
  • 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日(水)

リモコン

PSoCで受信したデータを元にプロジェクターをリモコン操作出来るか実験した

  • 相変わらずONには出来るが、OFFには出来ない
  • プロジェクターが起動していると外乱をまき散らしているのか、OFF判定は厳しいのか・・・
    • 信号データの見直し、回路の見直しなどが必要
  • Arduinoのシールドを使うことに
    • PSoC互換ボードを借りて(作って?)試してみる

が、一旦回路は置いといて(ある程度並行はしたいが)、先にAndroidアプリの基本形を固めてしまいたい。

  • Android側をサーバにして、XBeeから通信するテストの第一段階は成功

10月12日(金)

学習リモコン機能

前にちょっと試したときは、あまりいい結果が得られなかったので後回しにしていた学習機能。

  • 他のとこでも詰まる原因になっていたUARTの送信タイミングを変えることで、なかなかいい結果が得られることが判明。
  • いつもC言語とかの感覚で適当なところに挟んでしまうので、今後は十分気をつけたい
  • しかし、arduinoのリモコンシールドが届いたタイミングで気づくという…
  • これで試してみてPSoCで行けそうなら、もったいないがPSoCのままで。
    • やはり難しそうだったら、Arduinoにシフト

今後の課題を整理

  • PSoCで学習機能(リモコン信号を取得、Androidに転送)が出来るか
    • 出来なかったら、arduino
  • AndroidとXBee間の通信方法の変更
  • AndroidアプリのUI関係整備
  • Androidで操作履歴の保存
  • Androidアプリで操作履歴をUIに反映

上2つを取組中。 学習機能が出来るとして、データベースに保存などを実装する必要があるので、さっさとAndroidに集中できるように。

10月1日(月)

ifDLになってから初めて更新する…^^; 必要なことはノートと頭にメモってたのであまり使わなかった罠… 後期はメモ程度でも少しずつ・・・

通信テスト

ものづくりの裏ですこしずつ進めていたプログラムの改良。

  • PCとマイコンで通信がうまく行ってなかった原因はボーレートを下げることで解消された。
  • そのままAndroidとマイコンの間でもbyte型での通信は成功

次の改良点は、リモコン信号のデータとしてbyte型(8bit)では足りない数値を送りたいので、マイコン側の受信プログラムの改良。
1データ2byteで送りつけて受信側でまとめてintに入れるとか。

4月9日(月)

コメントはありません。 コメント/y_kawasaki?

お名前: