3軸加速度データ送信プログラム [ColdFire V2]
あいかわらず、加速度センサのデータをUDPで送り出すプログラムを改善しておりました。 オリジナルのファイル"ad"を変更して、3軸加速度データを送信するようにしてみました。
文字列バッファと送信バッファを準備した
3軸の加速度データを送信するために、各加速度データを数値文字列に変換し、セミコロンでつないで一行のデータとしてみました。 変換後の数値文字列をnbufポインタの指示するバッファに入れて、 bufポインタの指示するバッファに順に送信データを作っていきます。
adinit(void){InitAd(0x70);}disp(char ch){PrNum(GetAd(ch));} udpsend(char *str){ char *soc,*nbuf,*buf;long ip; ip=GetIP(str);if(ip==0)return; soc=CreateSocket(0); buf=MemoryAlloc(30); nbuf=MemoryAlloc(10); InitAd(0x70); #stop 0 for(;;){ GetDigit(GetAd(4),nbuf);StrCpy(buf,nbuf);StrCat(buf,";"); GetDigit(GetAd(5),nbuf);StrCat(buf,nbuf);StrCat(buf,";"); GetDigit(GetAd(6),nbuf);StrCat(buf,nbuf);StrCat(buf,";"); SendTo(soc,ip,30049,buf,StrLen(buf)); if(Getc(0)=='q')break; } MemoryFree(nbuf); MemoryFree(buf); CloseSocket(soc); }
まあ、動きはしますが、ワークエリアを複数取る上にプログラムが長ったらしくなるので、美しくありません。
送信バッファだけを使う方式
上の例は、BASIC的な発想に基づいています。 二つ目は、Cらしく、ポインタを駆使して、送信バッファだけを使います。
adinit(void){InitAd(0x70);}disp(char ch){PrNum(GetAd(ch));} udpsend(char *str){ char *soc,*buf;long ip; ip=GetIP(str);if(ip==0)return; soc=CreateSocket(0); buf=MemoryAlloc(30); InitAd(0x70); #stop 0 for(;;){ GetDigit(GetAd(4),buf);StrCat(buf,";"); GetDigit(GetAd(5),buf+StrLen(buf));StrCat(buf,";"); GetDigit(GetAd(6),buf+StrLen(buf));StrCat(buf,";"); SendTo(soc,ip,30049,buf,StrLen(buf)); if(Getc(0)=='q')break; } MemoryFree(buf); CloseSocket(soc); }
StrLen()関数が重そうなのですが、多少はマシでしょう。
LPFを実装してみた
ローパスフィルタを入れてみました。 PC側でフィルタ処理をすると送信データ長が長くなってしまい、処理速度が低下すると思ったので、ColdFireで複数測定値の和を求めるように変更しました。
adinit(void){InitAd(0x70);}disp(char ch){PrNum(GetAd(ch));} udpsend(char *str){ char *soc,*buf;long ip; int i; long x,y,z; ip=GetIP(str);if(ip==0)return; soc=CreateSocket(0); buf=MemoryAlloc(30); InitAd(0x70); #stop 0 for(;;){ x=y=z=0; for(i=0;i<4;i++){x+=GetAd(4);y+=GetAd(5);z+=GetAd(6);} GetDigit(x,buf);StrCat(buf,";"); GetDigit(y,buf+StrLen(buf));StrCat(buf,";"); GetDigit(z,buf+StrLen(buf));StrCat(buf,";"); SendTo(soc,ip,30049,buf,StrLen(buf)); if(Getc(0)=='q')break; } MemoryFree(buf); CloseSocket(soc); }
たった、4測定分の加速度データの和を求めているだけなのに、処理速度が落ちてしまいました。 これは、インタプリタという仕組みの限界なのでしょうか。
文字列変換は重そうなので、直接バイナリデータとして送信したほうが良さそうだな。
参考文献
まだ、在庫があるらしいぞ。
Interface (インターフェース) 2008年 09月号 [雑誌]
- 作者:
- 出版社/メーカー: CQ出版
- 発売日: 2008/07/25
- メディア: 雑誌
こんにちは
ニコニコ動画にColdFire基板を使った工作の動画がありました。3軸加速度センサーを使っているみたいです。
ネギにLANを繋いで振ってみた
http://www.nicovideo.jp/watch/sm4346746
by Sim (2008-08-21 08:32)
> ネギにLANを繋いで振ってみた
やっぱりネギを振るのか。
誰もが「きっと誰かがやるな」と予感していて、やっぱり表われたと言う感じでしょうか。
by hamayan (2008-08-21 08:56)
写真が同じままだったので更新に気がつきませんでした(^-^;
加速度センサについての動画ならここにもありますよー。
下のほうにYoutubeが貼られてます。
http://d.hatena.ne.jp/orangebook/20080807
by たけまろ (2008-08-21 19:57)