Twitter

最近のトラックバック

無料ブログはココログ

公開プログラム

2011年5月 6日 (金)

fortRun

■ fortRun

「fortRun.lzh」をダウンロード

(c) Masato Takahashi 2011

■ fortRunについて

単一ファイルでのコンパイル専用、フォートラン向けテキストエディタです。
g95が入っていればファイルを開いてすぐにコンパイル、実行出来ます。

プロジェクト管理機能すらない単純な物ですが、簡単にコンパイル、実行したい場合には便利かもしれません。

基本的に個人で利用するために開発したので、不完全、不安定な部分が多々あると思いますが、もし使って頂けて、役に立てれば幸いです。

ダイアログボックス等のデザインはTeraPadを参考にさせていただきました。

質問、バグ報告などがあれば、ilce.ma@gmail.comまでお願いします。

■ スクリーンショット

Frun

■ 使用許諾

fortRun.exeはフリーソフトです。
商用、非商用に関わらず自由に利用していただいてかまいません。
ただし、fortRunを利用したことによって被ったと思われる、いかなる損害、不利益に対しても当方は一切責任を負わないものとします。

複製、再配布も自由に可能ですが、その場合はreadme.txtを実行ファイルに同封してください。

また、onig.dllに関してはBSDライセンスに従うので、fortRun.exeとは別に、同封のreadme.txtに記載した「Oniguruma LICENSE」に従ってください。

■ 変更箇所

v2.10 - 2.11
固定書式でコメントアウト機能追加
インデント・アンインデント追加 ( 暫定 )

v2.9 - 2.10
位置/サイズの復元がうまく行かないバグを修正

v2.8 - 2.9
ソースコードを整理
再読込の挙動を変更
femtoPadからfortRunに改名

2011年4月10日 (日)

ecalc

■ スクリーンショット

Ecalc

■ ecalc.c

「ecalc.lzh」をダウンロード

(c) 2011 futr
ilce.ma@gmail.com

■ ecalc.cについて

それなりの機能を持った電卓プログラムをC言語で作ってみました。
カッコや四則演算の優先度に対応しています。

C言語初心者が、「できるかな?」という考えのもと作ったものなので、
きっと変数の名前の英語はめちゃくちゃ、そもそもアルゴリズムもめちゃくちゃかもしれません。
電卓の実装として、決して優れているわけではないと思います。
計算結果が正しいかどうかすらわかりません。

それでも、「初心者でも頑張ればなんとかそれなりの電卓を作れる」と言う希望になればいいかな、と思っています。

正直、そんなものを公開して意味があるのかも分かりませんが、誰かの役に立てれば嬉しいです。

■ 使用許諾

ecalc.cはフリーソフトです。
商用、非商用に関わらず自由に利用していただいてかまいません。
ただし、ecalc.cを利用したことによって被ったと思われる、いかなる損害、不利益に対しても当方は一切責任を負わないものとします。

複製、再配布も自由に可能です。
ecalc.cの一部、または全部を自分のプログラムに組み込むことも可能です。
その際、オリジナルの作者の名前や、本文章を含める必要も一切ありません。

■ コンパイル、実行 ( Windows )

0_console_nt.batをダブルクリックするとコンソールが開きます。

そこで、bccユーザーなら

> bcc32 main.c ecalc.c

gccユーザーなら

> gcc main.c ecalc.c

と入力することでサンプルプログラムをコンパイルできます。

さらに

> main.exe

もしくは

> a.exe

と入力することでサンプルプログラムが実行されます。
exitと入力すると終了します。

2010年6月20日 (日)

円線図ジェネレーター

「ensen.lzh」をダウンロード

■ これは何?

円線図ジェネレータなるものを作りました。

学校のレポートで誘導電動機の円線図書かなきゃ・・・という困った状態、皆さん一度はあるでしょう(!?)
そんな時にはこれです。円線図ジェネレーターです。

品質は、それこそ学校のレポートレベルかそれ未満なので、実用性皆無です。

そもそも、ジェネレートされる円線図が正しいのかすら確かめていません。

あくまでホビー用、何があっても自己責任でお願いします。

■ スクリーンショット

Circle

■ 免責事項

円線図ジェネレータを使ったことによって被ったと思われる、いかなる損害に対しても、原因によらず当方は一切責任を負わないものとします。

■ 作

futr 2010
ilce.ma@gmail.com

2008年4月 4日 (金)

ぐるぐるあ~す

ぐるぐるあ~す、GoogleEarthにTDS01VとGPSを無理やり繋いじゃうソフト、一応動くようになったので、テスト版を公開しておきます。

「gleearth.lzh」をダウンロード

今いる場所で、今見ている方向の風景をGoogleEarthに表示します。
また、高い目線で見たりも出来ます。
(TDS01VとストロベリーリナックスのGPS用です)

001

・・・実は、悲しい事がありまして・・・

GoogleEarthって上が向けないみたいなんです!

実は出来るのかもしれないですが、少なくとも今のところは方法は分からないです・・・

と言うわけで、TDS01Vを接続しても水平より下側が見れるだけなんです。
もちろん方位に関してはちゃんと表示します。

それと、結構反応速度が遅いようなので平均化はしていません。
そのため、動かした瞬間に変なところに飛んだりすることがありますが、ご了承ください。

・・・等と色々制限事項が付いちゃいましたが、個人的にはこのソフト結構楽しいです(笑)

また、GPSが無い場合でも、TDS01Vで単独で使用可能です。
その場合は、観測点にしたい地点にGoogleEarth側で移動して、ぐるぐるあ~すの「観測地設定」ボタンを押してください。

また、ぐるぐるあ~す側で制御中はGoogleEarth側からは操作できません。

・・・ん??

「それってGoogleEarthから操作した方が便利なんじゃ・・・」

ですって??

いや・・・まぁ、そうなんですが(笑)

でも・・・やっぱ・・・楽しいじゃないですか(笑)

それと、相変わらずどんな動作をするか分からないので、使用は自己責任でお願いします。
すいません。

また、バグや質問等ありましたら遠慮なくお知らせください。

2008年4月 1日 (火)

GPSControlテスト版

最近作ってるGPSControlですが、とりあえず動いたのでアップしておきます。

テスト版なので、まだ危険な動きや暴走する可能性もあります。

改造、再配布、全て自由ですが、使用は自己責任でお願いします。
すいません。

「gpsc.lzh」をダウンロード

一応ストロベリーリナックス用ですが、もしかすると他のNMEA-0183フォーマットのGPSでも動くかもしれません。

また、何かバグや質問等ありましたら、遠慮なくお知らせください。

■ 簡単な使い方

■ 宣言

GPSControl gpsc;

■ 開く/閉じる

gpsc.Open(COM,速度,衛星数);
gpsc.Close();

衛星数はSAT_12かSAT_16を入れます。

■ 受信

gpsc.Recv();

この関数は、

DATA_NO
DATA_GGA
DATA_RMC

等を返してきます。
まだ受信できていない場合は、DATA_NOを返します。

何か受信できた場合は、そのデータが何かをDATA_○○○の形で返してきます。

また、2秒に一回程度は呼び出してください。
そうしないと、バッファが溢れてしまいます。

データは

rmc
gga
gsa
gsv

の各構造体にセットされます。
数字でデータが入ってくる物はそのまま数字に変換しています。
文字の場合は定数に置き換えています。
(MODE_DGPS等)

2008年3月 8日 (土)

RCXEmulator

■ RCXEmulator

「rcxe.lzh」をダウンロード

■ これは何?

LEGO社から販売されている、マインドストーム(RCX)のエミュレータです。
高専などの教育機関ではまだ現役で使われている「RCX」用のプログラムを、パソコン上で走らせることが出来ます。
ちょっとしたテストや、デバッグに使うと便利かもしれないです。

■ 機能

マインドストームの動きをエミュレートできます。
一命令ずつ実行できます。
変数やプログラムカウンタの値を直に変更できます。
バイナリデータだけでなく、ソースファイルからのエミュレートも可能です。
(間にnqcコンパイラを介しています)

■ スクリーンショット

Rcxep_2 

■ 使い方

申し訳ありません。
まだかけてないです。
何か質問等がありましたら、メールやコメントでお知らせください。
出来る限りお答えしたいと思います。

■ 動作環境

Windows XP(SP2) Core 2 Duo
Windows Me Duron
以上の環境で確認済みです。
その他の環境では不明です。

■ インストール、アンインストール

ダウンロードして展開すれば、インストールは完了します。
アンインストールは、展開されたファイルを削除すれば完了します。

■ 免責・著作権

このプログラムを利用したことによって被ったと思われる、いかなる損害、不利益に対して、当方は一切責任を負わないものとします。
このプログラムの著作権は、高橋 昌土が保有します。
再配布、改造、全て自由に行ってよいです。
但し、nqc.exeに関してはMPLに従います。

■ 更新履歴

2008/3/15 Ver 1.21公開 (src ver 1.0)
2008/3/8 Ver 1.2 公開 (src ver 1.0)

■ その他

(c) 2008 高橋 昌土
ilce.ma@gmail.com

2007年9月15日 (土)

TDS01V 制御クラス(詳細)

*最新テスト版公開しました
テスト版へ

■TDS01V制御クラス(TDControl)

「TDControl.lzh」をダウンロード

■はじめに

先日公開したTDS01V制御クラスの公開ページを書き直してみました。
ここで言う「制御」とは評価ボードの制御のことです。
なにぶんプログラミング初心者なので、バグや何らかの問題がある可能性もあります。
また、このページ自体にもミスがある可能性があります。
何か問題があった場合、コメント等で遠慮なくお知らせください。すいません。

■これは何?

秋月電子で販売されている TDS01V を Windows上でC++を用いてなるべく簡単に制御できるようにしたクラスです。

■動作環境

C++Builder6、Borland C++Compilerにて確認済み。
VC++では不明。

■免責・著作権

作者は、このコードを使用したことによって発生したと思われる、直接的、間接的被害に対して一切責任を負わないものとします。
このコードの著作権はMasato Takahashiが所有します。

■関数一覧

 □初期化 / 終了用
  bool OpenCom(int ComNum)
   動作:Comポートを開く。
   引数:Com番号。
   戻値:true / false ( 成功 / 失敗 )

  bool SetCom(void)
   動作:Comポートを設定する。
   引数:なし
   戻値:true / false ( 成功 / 失敗 )

  bool CloseCom(void)
   動作:Comポートを閉じる。
   引数:なし
   戻値:true / false ( 成功 / 失敗 )

 □通信用
  bool AutoStart(int cycle,float alt,float henkaku)
   動作:TDS01Vを自動的に初期化する。
   引数:cycle = 通常0 、alt = 高度の基準気圧 、henkaku = 偏角
   戻値:true / false ( 成功 / 失敗 )

  void SendCommand(WORD Command)
   動作:TDS01Vへコマンドを送る。
   引数:コマンド (後述)
   戻値:なし

  int RecvCommand(void)
   動作:TDS01Vからコマンドの返答を受信。
   引数:なし
   戻値:RECV_GOOD / RECV_BAD / RECV_NO ( 成功 / 失敗 / 未受信 )
   備考:CMD_READの返答の場合、計測結果受信処理も一度に行う

 □その他
  void SetSensorParam(int cycle,float alt,float henkaku)
   動作:自分で初期化を行う場合のセンサー設定用
   引数:cycle = 通常0 、alt = 高度の基準気圧 、henkaku = 偏角
   戻値:なし
   備考:AutoStart使用時には不要。

■使用変数

 □RecvData構造体
   int MagVX
    用途:地磁気センサ ベクトルデータX軸(μT)
    備考:10で割ることで、読むことが出来る。

   int MagVY
    用途:地磁気センサ ベクトルデータY軸(μT)
    備考:10で割ることで、読むことが出来る。

   int MagVZ
    用途:地磁気センサ ベクトルデータZ軸(μT)
    備考:10で割ることで、読むことが出来る。

   int DirDeg
    用途:方位角(度)
    備考:10で割ることで、読むことが出来る。

   int AccVX
    用途:加速度センサ ベクトルデータX軸(G)
    備考:100で割ることで、読むことが出来る。

   int AccVY
    用途:加速度センサ ベクトルデータY軸(G)
    備考:100で割ることで、読むことが出来る。

   int AccVZ
    用途:加速度センサ ベクトルデータZ軸(G)
    備考:100で割ることで、読むことが出来る。

   int RollDeg
    用途:ロール角(度)
    備考:10で割ることで、読むことが出来る。

   int PitchDeg
    用途:ピッチ角(度)
    備考:10で割ることで、読むことが出来る。

   int Barometer
    用途:気圧情報(hpa)
    備考:10で割ることで、読むことが出来る。

   int Altitude
    用途:高度情報(m)
    備考:最初に設定した基準気圧を0とした相対値で計測されている。
    備考:割る必要はない。

 □BYTE CheckSystem
  用途:状態要求に対する返答を格納
  備考:この値が0ならば正常と言うことになる。

 □int RomVersion
  用途:ロムバージョンを格納
  備考:200等のように記録されている。

■コマンド一覧

 □CMD_SET_CONDITION ( 初期化用 )( 計測条件設定 )
  動作:TDS01VにSetSensorParamで指定した設定を送る。
  備考:AutoStartを使用した場合は不要。

 □CMD_SET_SENSORTYPE ( 初期化用 )( センサ情報項目設定 )
  動作:TDS01Vから送られてくるデータ形式を指定。
  備考:AutoStartを使用した場合は不要。
  備考:データ形式は「全データ」で固定されている。

 □CMD_RESET ( 初期化用 )( リセット )
  動作:初期化する
  備考:AutoStartを使用した場合は不要。

 □CMD_MAGINIT ( 初期化用 )( 地磁気センサ初期化要求 )
  動作:地磁気センサ初期化
  備考:AutoStartを使用した場合は不要。

 □CMD_ROMVER ( ROMバージョン要求 )
  動作:ロムバージョン要求
  備考:AutoStartを使用した場合は不要。結果は int RomVersion に保存される。

 □CMD_CHECK ( 状態要求 )
  動作:状態要求
  備考:AutoStartを使用した場合は不要。結果は int CheckSystem に保存される。

 □CMD_START ( 計測開始 )
  動作:測定を開始する。
  備考:これを送るとTDS01Vはデータを送信してくる。

 □CMD_READ ( センサ情報要求 )
  動作:TDS01Vから送信されたデータを読む。
  備考:計測データの受信もコマンドへの返答の受信もこれで行う。

 □CMD_STOP ( 計測停止 )
  動作:測定停止
  備考:通常は使わない。

■例

 □宣言
  TDControl td;

  
// クラスの宣言をします。
  // ここより下は「td」として宣言したと仮定して書いています。

 □COMオープン
  if(td.OpenCom(COM番号)){
    if(td.SetCom()){
      printf("オープン成功\n");
    }else{
      td.CloseCom();
      printf("設定失敗!\n");
    }
  }else{
    printf("オープン失敗!\n");
  }

  // 例えば、このようにしてオープンしてください。
  // この辺は自由に書き換えていいです。
  // SetCom()が失敗した場合は、必ずCloseCom()を実行してください。

 □センサー初期化
  td.AutoStart(0,基準気圧,偏角);

  
// この関数で一発で初期化されます。
  // 完了するまで制御が戻りません。
  // 基準気圧は、高度が0mとなる気圧です。
  // 偏角については、TDS01Vの説明書をご覧ください。

 □測定結果を受信
  td.SendCommand(CMD_START);

  
// まずは上を実行し、TDS01Vに計測を開始させます。
  // 次に、今のコマンドに対する返答を受信しなければなりません。  

  while(1){
    int ret = td.RecvCommand();
    if(ret == RECV_BAD){
      printf("問題発生!\n");
      break;
    }
    if(ret == RECV_GOOD){
      break;
    }
  }

  // コマンド返答受信ですが、例として上のようなプログラムを作ってみました。
  // これでは暴走の危険があるので注意してください。
  
// 実際は別スレッドで毎回チェックするか、エラー処理をしっかりするか、
  // メインループ等の中で毎回チェックするようにしてください。
  // RecvCommand関数は、受信チェックと受信処理を一度にしてくれます。
  // 問題なく受信されれば、RECV_GOODを、
  // TDS01Vがエラーを返すと、RECV_BADを、
  // まだ何も受信していなければ、RECV_NOを、返します。
  // 上の例では、何かを受信するまで無限ループを続けています。

  // SendCommandRecvCommandが成功する(何か帰ってくる)まで、
  // 再び実行してはいけません。
  // なので、上のようなプログラムにして、受信するまで戻れないようにするか、
  // 別スレッドやメインループなどで、毎回チェックし、何か受信した場合、
  // 新たにSendCommandを行う等のようにしてください。

  // 次に受信を行います。

  td.SendCommand(CMD_READ);
  上の様なコマンド返答受信処理;


  // これでTDS01Vが計測結果を返してきます。
  // CMD_STARTとCMD_READは必ずセットで使います。
  // CMD_READの後にも、上と同じ様なコマンド返答受信処理を必ず行ってください。
  // そして、コマンド返答を受信した時点で、
  // 既にデータの受信は完了しています。 ( RECV_GOODの場合 )
  // 受信に関する処理は全てRecvCommandが行っています。
  // 結果は、RecvData構造体にint型で格納されています。
  // 各データはint型として宣言されているため必要に応じて割る必要があります。
  // 次のようにして取り出します。
  // ( 例として気圧とピッチ、方位角を取り出しています )

  float Barometer = td.RecvData.Barometer / 10.0;
  float Pitch = td.RecvData.PitchDeg / 10.0; 
  float Dir = td.RecvData.DirDeg / 10.0;

  // あとは、各データを自由に扱ってください。
  // なお、RecvData構造体については、上の「変数」で書いた通りです。
  // 小文字のrecvdata構造体もありますが、これは内部処理用です。

 □終了
  td.CloseCom();

  // これを呼び出すだけで終了できます。
  // ただし、終了する前に必ず実行してください。
  // 以上で説明は終了です。
  // 何か、ミスや間違い、バグを発見した場合は知らせていただけると助かります。

2007年9月11日 (火)

MitakaPointer

■MitakaPointer

「MitakaPointer.lzh」をダウンロード

■注意

動作がまだまだ不安定な可能性があります。
何かバグや問題、質問等ありましたら、遠慮なくメールやコメント等でお知らせください。
本ソフトとmitaka、TDS01Vの作者とは無関係です。
本ソフトに関する質問をmitaka、TDS01Vの作者に問い合わせることはしないでください。

■これは何?

Mitaka と TDS01V をPC内部でつないで、TDS01Vを向けた方向にある星をMitakaに表示する画期的(?)なソフトです。
天体観測の時に大活躍、教育分野でも使えそうです。
レーザー発光モジュールと合わせればさらに強力です。
ただ、MitakaがPCのバッテリーを食べまくると言う問題点もあったりします。

■スクリーンショット

Mp_2

■使い方

まだちゃんとした物を書けていません。
申し訳ないです。

■動作環境

WindowsXPで動作確認済みです。
MeではMitakaが動作しませんでした。
その他の環境、OSでは不明です。

■インストール、アンインストール

ダウンロードし、解凍することでインストール完了です。
アンインストールは解凍で作られたファイルを削除するだけです。

■免責・著作権

作者は、このソフトを使用したことによって発生したと思われる、直接的、間接的被害に対して一切責任を負わないものとします。
このソフトの著作権は高橋 昌土が所有します。

■更新履歴

2008/04/02 : バージョンアップしました。
2007/09/11 : 公開しました。

(C) 2008 高橋 昌土

2007年9月 9日 (日)

TDS01V 制御クラス(C++)

*最新テスト版公開しました
テスト版へ

*もう一つ公開、解説ページを書いてみました。良かったらこちらもご覧ください。
公開、解説ページ2へ

やっとこさ完成しました!

TdcTDS01V制御クラス!
名前をTDControlと言います。

秋月で販売されている [ TDS01V ] と言う、加速度や地磁気、気圧センサーまで入った面白い製品をC++で簡単に制御できるようにしたものです。

とりあえず自分用に作っていたものなので、英語はめちゃくちゃ、ソースは汚い、無駄が多い等、あんまりいいところはないですが、とりあえずはこれで楽に使えるようになったかな、と思います。
そして、せっかく作ったので、ブログで公開してみようかなと思い、公開することにしました。

プロの方から見れば、本当に汚いソースかもしれませんが、それでも使ってみたい方がいれば、ぜひぜひ使ってみてください。
簡単な機能しかないので、少し使ってあとは改造しちゃったり自由にしてもらってオッケーです(笑)

動作確認はBorland C++ Compilerで行っています。

「TDControl.lzh」をダウンロード

簡単な関数紹介、使用条件などをtdcontrol.hに書いたので、必ず最初にご覧ください。tdcontrol.hと言うのがクラス本体です。
自分のプログラムにインクルードして使ってください。

サンプルに、sample.cppを一緒に入れています。
それと、この記事の下に簡単な使い方を書いてみました。

よかったら参考にして下さい。

質問、バグ報告、その他何でもありましたら、コメントかメールにてご連絡ください。
可能な限りお答えしようと思います。

さてさて、何でこのようなものを作ったかといいますと、directX等とくっ付けて、ゲームコントローラーとして遊んじゃおうかなぁ~なんてたくらんでるからです(笑)
頭の上に乗っけて、HMDをかぶれば、かなり面白いものが出来そうです。

さらにmitakaとくっつけようともたくらんで色々プログラム中です。
そちらも完成したら公開しようと思います。

//簡単な使い方//

以下が簡単な使い方です。
まずは、インクルードし、

TDControl td;

等のように自分のソースに宣言してやります。
そして

td.OpenCom(5);

と言う感じにしてCOMを開いてやります。
このときの引数は、COM番号で、int型です。
成功すればtrueが帰ります。

次に成功した場合、

td.SetCom();

をします。
これでCOMの設定を行います。

成功すればtrue、失敗すればfalseが帰るので、falseの場合は、

td.CloseCom();

を行い、すぐにCOMを閉じてください。
また、COMを開いた場合、終了する前にも必ずCloseComは必要です
忘れると次に開けなる可能性があるので注意してください。
そして、開けたら、今度はいよいよ通信開始です。
ただ、その前に計測条件を設定しなければなりません。

SetSensorParam(int cycle,float alt,float henkaku);

で行います。
引数のcycleは通常0です。
altは高度0になる気圧を入力してください。
henkakuは偏角設定です。
なお、AutoStartを使用する場合は、この関数は不要です(詳しくは下にあります)

以上で設定完了です。
さて、通信ですが、使う関数は

SendCommand(WORD Command)
RecvCommand(void) 

の二つのみです。

SendCommand は TDセンサにコマンドを送ります。
コマンドはソースにenum型として書いてあるのでそちらをご覧ください。
そして、そのコマンドをTDセンサの通信ルールに従って送信します。

td.SendCommand(CMD_START);

の様に呼び出すだけで、送信は完了します。
そして、受信には

RecvCommand(void)

を使用します。
引数は不要です。

この関数は、三種類の値を返してきます。
RECV_NOはまだ何も受信していないことを示します。
そのまま次の処理に移ってください。
ただし、まだ次のコマンドは送らないでください。

RECV_BADと、RECV_GOODは何か受信したときに帰ってきます。
BADの場合は、コマンド失敗、を意味します。
また送りなおす、もしくは終了してください。

GOODの方は成功を意味します。
コマンドはTDセンサが正確に受信し、ちゃんと処理された、と言う意味です。
CMD_READを送った場合には、すでに受信処理も完了しています。
RecvData構造体から、必要なデータを読み出してください。

ただし、この時int型で生のまま保存されているので、必要に応じて割ってください。
それと、TDセンサは使う前に初期化が必要です。
自分でコマンドを送信して初期化してもいいのですが、少し長くなるので、一応関数を用意しておきました。

AutoStart(int cycle,float alt,float henkaku)です。

ただし、完了するまで制御が帰ってきません。
成功すればtrue,失敗知ればfalseが帰ります。
cycle引数は通常0で、altは高度が0となる気圧を入れます。
henkakuは「計測条件設定」の「偏角設定」のことです。
以上が簡単な使い方です。