新しく発言する EXIT インデックスへ
鉄道模型のスピード計測ソフトを作っている...

  鉄道模型のスピード計測ソフトを作っているのですが。 に〜みや@四国急行電鉄 2004/06/19 21:59:01 
  元のMSX-BASICのプログラムは以下のようなも... に〜みや@四国急行電鉄 2004/06/19 23:27:10 
  │└こんな感じかな。 青木太一 2004/06/20 02:24:41 
  │ ├早速プログラムを作成頂きまして誠にありが... に〜みや@四国急行電鉄 2004/06/20 21:51:32 
  │ │└メールを数通読んだだけでウィルスに感染し...2004/06/21 21:44:20 
  │ │ ├自宅のメールアドレスは必要以上に他人に教... に〜みや@四国急行電鉄 2004/06/21 22:05:15 
  │ │ └ウィルスの感染源はメールだけとは限りませ... 青木太一 2004/06/22 03:15:40 
  │ │  └Windowsのアップデートも忘れずついでにして... に〜みや@四国急行電鉄 2004/06/22 08:45:59 
  │ ├青木様、早速、普通にマウスで動作実験をし... に〜みや@四国急行電鉄 2004/06/20 22:18:46 
  │ │└GetStateKeyの文法エラーについて。 青木太一 2004/06/21 10:48:24 
  │ └青木様、お返事が遅くなり、大変申し訳あり... に〜みや@四国急行電鉄 2004/06/21 21:36:21 
  │  ├青木様、修正版のプログラムですが、これも... に〜みや@四国急行電鉄 2004/06/21 21:49:47 
  │  │├青木様、今回はプログラム作成、ありがとう... に〜みや@四国急行電鉄 2004/06/21 22:28:54 
  │  ││└<<<書いちゃったことについて>>> 青木太一 2004/06/22 04:24:09 
  │  ││ └ちなみに・・・ に〜みや@四国急行電鉄 2004/06/22 21:58:32 
  │  │└修正版のプログラムなどについて 青木太一 2004/06/22 04:58:02 
  │  └バージョンの問題でした。 青木太一 2004/06/22 04:34:49 
  │   └ありがとうございます。お気を悪くなさらな... に〜みや@四国急行電鉄 2004/06/22 08:41:13 
  │    └<<<まず問題設定>>> 青木太一 2004/06/22 15:20:55 
  │     └<<<現在の問題点>>> に〜みや@四国急行電鉄 2004/06/22 18:47:22 
  │      ├恐れながら、提示されたMSX-BASICプログラム... 青木太一 2004/06/22 23:41:36 
  │      └実は私がパソコンを始めたのは今から約20年... に〜みや@四国急行電鉄 2004/06/23 00:06:37 
  昔にMSX-BASICを使っておられたのなら10進...2004/06/20 09:44:08 
  │└今回は青木様のご好意で他力本願になってし... に〜みや@四国急行電鉄 2004/06/21 22:25:28 
  センサがRS-232Cポートに接続するものであれ... 白石 和夫 2004/06/20 18:40:59 
  │└開発者の白石先生自らコメントを頂き、恐縮... に〜みや@四国急行電鉄 2004/06/21 22:20:15 
  逆走された場合の処置として・・・ に〜みや@四国急行電鉄 2004/06/22 00:21:03 
   └早速試しにやってみましたが、先に右クリッ... に〜みや@四国急行電鉄 2004/06/22 00:28:46 
    └とりあえず、センサ回路側にR-Sフリップフロ... に〜みや@四国急行電鉄 2004/06/22 01:36:28 
     └ごめんなさい、コレは私の勘違いです。 に〜みや@四国急行電鉄 2004/06/22 21:55:00 

  鉄道模型のスピード計測ソフトを作っているのですが。 に〜みや@四国急行電鉄 2004/06/19 21:59:01  ツリーへ

鉄道模型のスピード計測ソフトを作っているのですが。
に〜みや@四国急行電鉄 2004/06/19 21:59:01
 昔に出版された「鉄道模型のエレクトロニクス」という本の中で、
MSX-BASICを使ったスピード計測ソフトが紹介されていました。今、
これを十進BASICで再現してやりたいのですが、計測信号のパソコン
との受け渡しはどのようにすればいいのでしょうか?センサは光センサ
を使用(フォトトランジスタ及び赤外発光ダイオード)し、更にフォト
カプラにてパソコン側とは電気的に切り離されております。また、
パソコン側ですが、マウスの左ボタンに信号入力時点で計測開始、右
ボタンに信号入力した時点で計測を終わるような感じで考えているの
ですが、どのようにプログラミングすれば良いか教えて下さい。お願い
致します。一応、昔はMSXでBASICやZ80のマシン語を操ってプログラマ
してましたが、Windowsの世界にはどうもついていけません。

  元のMSX-BASICのプログラムは以下のようなも... に〜みや@四国急行電鉄 2004/06/19 23:27:10  ツリーへ

Re: 鉄道模型のスピード計測ソフトを作っているのですが。
に〜みや@四国急行電鉄 2004/06/19 23:27:10
 元のMSX-BASICのプログラムは以下のようなものでした。(MSX-
BASICで書かれていますので、MSX独自の文法の部分があります。また
初期のMSXでは漢字が使えませんが、MSX2+以降では使えますので、
それに対応したバージョンアップを独自で行っております。)

10 KEY OFF:CLS:LOCATE 7,7:INPUT "縮尺";A
20 CLS:LOCATE 7,7:INPUT"距離(cm)";D
30 CLS:LOCATE 7,7:PRINT"縮尺:1/";A
40 LOCATE 7,8:PRINT"距離:";D;"cm"
50 LOCATE 7,11:PRINT"スタートをどうぞ!"
60 I=STRIG(1):IF I THEN 80
70 GOTO 60
80 TIME=0:BEEP:BEEP
90 LOCATE 7,11:T=TIME:S=T/60
100 PRINT USING"時間=##.##秒";S
110 J=STRIG(3):IF J THEN 130:GOTO 90
120 BEEP:BEEP:LOCATE 7,13:V=D/S
130 PRINT USING"模型速度=##.##cm/s";V
140 LOCATE 7,15:VA=V*A*.036
150 PRINTUSING"実物換算=###.#km";VA
160 K=STRIG(0):IF K THEN 30:GOTO 140
170 END

 MSXにはジョイスティックポートとしてD-SUB9ピンコネクタが付いて
おり、センサはそれの5番ピンから+5V電源を、9ピンがGND、トリガ1
が6ピン(I=STRIG(1)に対応。)、トリガ2が7ピンで(J=STRIG(3)に
対応。)それに直に信号を入れてやれば動いたので、特に複雑なインタ
フェース回路も必要なく、簡単にできたのですが、今のDOS-V機はイジ
りようがないですね・・・。

  │└こんな感じかな。 青木太一 2004/06/20 02:24:41  ツリーへ

Re: 元のMSX-BASICのプログラムは以下のようなも...
青木太一 2004/06/20 02:24:41
こんな感じかな。

---------ここから--------------
set window -1,1,-1,1
plot text ,at -1,0:"注意点 マウスのボタンクリックは"
plot text ,at -1,-.1:"マウスカーソルがグラフィックウィンド(ここ)内にないと反応しない"

input prompt"縮尺":a
input prompt"距離":d
do
print"縮尺:1/";a
print"距離:";d;"cm"
print "スタートをどうぞ!"

!マウスの左ボタン押下待ちループ
do
mouse poll mx,my,ml,mr
loop until(ml=1)

LET start_time=time
beep

!マウスの右ボタン押下待ちループ
do
LET s=time - start_time
print using"時間=##.##秒": s
mouse poll mx,my,ml,mr
loop until(mr=1)

beep

LET v=d/s
print using"模型速度=##.##cm/s":v
LET va=v*A*.036
print using"実物換算=###.#km":va

!STRIG(0)ってスペースキーですよね?
!スペースキーが押されていたら計測開始から繰り返す
loop while(GetKeyState(32)<0)

end
----------ここまで-----------------

補足
・ユーザインターフェースは若干違います。
 経過時間が流れて表示されるのが気になるようでしたら、
 (十進BASICにはLOCATEが無い)「print」でなく「plot text,at」
 を利用して書き直せます。
 今回はなるべくわかりやすいコードにするためprintを使用しました。

・マウスカーソルがグラフィックウィンドウ内に無いと反応しません
 一応注意を促すためにグラフィックウィンドウにその旨表示しています(プログラムの2,3行目)

感想
最初マウスボタンを使用するのは違和感あったのですが、
ON,OFFの単純な信号でも、なかなかセンサからPC入力させる手軽な方法って
思いつかないものですね。
十進BASICはCOMポートを扱うこともできるので、シリアル通信にまでできれば何とかなりそうですが...

  │ ├早速プログラムを作成頂きまして誠にありが... に〜みや@四国急行電鉄 2004/06/20 21:51:32  ツリーへ

Re: こんな感じかな。
に〜みや@四国急行電鉄 2004/06/20 21:51:32
 早速プログラムを作成頂きまして誠にありがとうございます。ホント
はチョットだけヒントをもらったら自分で作ろうと思っていましたが、
これで手間が省けました。青木様、本当に感謝致します。

>!STRIG(0)ってスペースキーですよね?

 そうです。元のプログラムでは、スペースキーを押せば測定を最初
からやり直すようにしてあるようです。

>最初マウスボタンを使用するのは違和感あったのですが、
>ON,OFFの単純な信号でも、なかなかセンサからPC入力させる手軽な
>方法って思いつかないものですね。十進BASICはCOMポートを扱うこと

 MSXの時代はジョイスティックのポートにナマで信号入れても大丈夫
でした。しかしPC-9801あたりから、ポートを簡単には使えないように
なってきていて、簡単なON/OFF信号のやり取りだけなのにややこしい
事をせにゃいかんようになって大いに困ったものでした。DOS-V機なん
て、ピン・アサイン見ても何が何だかわかりませんし・・・。

>シリアル通信にまでできれば何とかなりそうですが...

 そこまで大げさなシステムまでは考えていません。可搬性を考えて、
PCはVAIOの折り畳み可能なキーボードの奴を新たに買いました。
しかし、たった5秒インターネットにつないで、メールを数通読んだ
だけでウィルスに感染し、今、サポートセンターに入院しております。
初期設定が終わって、ちょっと確認だけのつもりでつないだだけなのに
なぁ・・・。SONYのサイトが悪いのか、ウィルスメールを見抜けなかっ
たプロバイダ(ウィルスチェックサービスを謳い文句にしている)が
悪いのか、はたまたつないだ私が悪いのか・・・。何だか理不尽です。
 KTMC(関西鉄道模型クラブ)に所属しており、その運転会にて余興で
使おうとスピード測定器を製作していたので、持ち運び可能な簡単な
システムでというのが第一条件でして、会場まで重いパソコンやら
計測器やらを運んでゆくよりは小さなPDAに毛の生えたようなモバイル
機で、簡単なインターフェースでUSBマウスポートを使ってできれば
なぁ・・・と思っていただけの事なんで、計測精度うんぬんはどうでも
良いのです。とにかくありがとうございました。

  │ │└メールを数通読んだだけでウィルスに感染し...2004/06/21 21:44:20  ツリーへ

Re: 早速プログラムを作成頂きまして誠にありが...
2004/06/21 21:44:20
>メールを数通読んだだけでウィルスに感染し

最近では多くのウィルスが勝手に送り付けられるようで、大抵の場合自分で防御しないといけないようです。
簡単な対策として、
メールアドレスはどうしても必要な場合を除いて公開しないこと、
受け取る理由の無いメールや添付ファイルはYahoo名義であってもそのままごみばこへ(名前は偽りの場合がある)、
Outlook Expressはその機能を利用して勝手にファイルを開いたり
ウィルスを知らない間に他の人に送りつけるようになるので、他のメールソフトを使うこと等、
でかなり防げます。

  │ │ ├自宅のメールアドレスは必要以上に他人に教... に〜みや@四国急行電鉄 2004/06/21 22:05:15  ツリーへ

Re: メールを数通読んだだけでウィルスに感染し...
に〜みや@四国急行電鉄 2004/06/21 22:05:15
 自宅のメールアドレスは必要以上に他人に教えるようにはして
おりません。実際ここに公開しているのは会社のアドレスです。
一応、ファイヤウォールやウィルス検知装置を備えているので、
ある程度は大丈夫かと思っています。だから会社のメーラーには
しょっちゅうウィルス・アラートのメールが届きます。会社では
アウトルックは使ってないのでその辺は大丈夫ですし。まぁ、
100%安全とは言い切れませんが・・・。ご心配をお掛け致し
ましたが、本日VAIO君は無事退院し、ノートンのアンチウィルス
で早速武装しておきました。定期的にパターンファイルの更新と
か色々気配りは必要ですね。今回はいい勉強になりました。先代
の東芝Dynabook君は親父が使うというので、HDDを7GBから70GBに
積み替えてパワーアップして払い下げます。OSはWin.Meです。4年
で買い替えはちと早いかとも思いましたが、調子が悪いのと、
今回のようなイベントでの余興に持っていくにはデカくて重いの
でアッサリ代替を決めました。このVAIOで7代目です。これとは
別に懐かしさでつい、中古で数千円でMSXを買ってしまいました。
MSXが私の8代目パソコンですね。

  │ │ └ウィルスの感染源はメールだけとは限りませ... 青木太一 2004/06/22 03:15:40  ツリーへ

Re: メールを数通読んだだけでウィルスに感染し...
青木太一 2004/06/22 03:15:40
ウィルスの感染源はメールだけとは限りません。WindowsUpdate
http://v4.windowsupdate.microsoft.com/ja/default.asp
もお忘れ無く。
(十進BASICに関係なくてすいません)

  │ │  └Windowsのアップデートも忘れずついでにして... に〜みや@四国急行電鉄 2004/06/22 08:45:59  ツリーへ

Re: ウィルスの感染源はメールだけとは限りませ...
に〜みや@四国急行電鉄 2004/06/22 08:45:59
Windowsのアップデートも忘れずついでにしておきました。ご心配
をお掛け致しました。

  │ ├青木様、早速、普通にマウスで動作実験をし... に〜みや@四国急行電鉄 2004/06/20 22:18:46  ツリーへ

Re: こんな感じかな。
に〜みや@四国急行電鉄 2004/06/20 22:18:46
 青木様、早速、普通にマウスで動作実験をしてみましたが、再測定の
スペースキー入力の文で文法エラーが出てうまくいきません。

loop while(GetKeyState(32)<0)

この部分を除けば動作はOKでした。ありがとうございました。
 光センサの信号をマウスのボタンのクリック信号に置き換えてやる
必要がありますが、これはテスタと自作のロジックチェッカーで裸に
ひん剥いたマウスのプリント基板を当たってやれば良いので、あとは
電子工作だけですね。学生時代、コテ先の魔術師と呼ばれた?ハンダ
付け名人(自称)のウデがうなりますなぁ。
 私の趣味は鉄道模型・電子工作・パソコンの3つを融合させたような
感じです。鉄道模型+電子工作だけでも充分面白いのですが、パソコン
を加える事で更に無限に楽しみは広がると思います。
 私が小学生の頃にMSXでパソコンを始めてもう20年以上になります。
中学の技術科の授業で習ってからハマった電子工作にしても15年以上に
なります。最近、電子工作するにも廃版になっているICやトランジスタ
等の石が多くて買い物一つにしても互換表見ながら四苦八苦です。でも
やはり使い慣れた石の方が良くて、新しく開発された石は使いにくい
印象を持ちますね。ただ、慣れないだけなんでしょうけど。

  │ │└GetStateKeyの文法エラーについて。 青木太一 2004/06/21 10:48:24  ツリーへ

Re: 青木様、早速、普通にマウスで動作実験をし...
青木太一 2004/06/21 10:48:24
GetStateKeyの文法エラーについて。

あれ、なんで文法エラーになるんだろう?
もしよかったら文法エラーの内容や、
(「文法の誤り」ダイアログの内容)
十進BASICのバージョンを教えていただけますか?
(メニューのヘルプのバージョン情報で出てくる情報)

あと、試しに下のプログラムは動きますか?

!スペースキーが押されているとき負の数が出力される、
!それ以外のとき0以上の数が出力される
do
print GetKeyState(32)
loop
END

  │ └青木様、お返事が遅くなり、大変申し訳あり... に〜みや@四国急行電鉄 2004/06/21 21:36:21  ツリーへ

Re: こんな感じかな。
に〜みや@四国急行電鉄 2004/06/21 21:36:21
 青木様、お返事が遅くなり、大変申し訳ありません。私のイン
ストールした十進BASICは、木村良夫先生の「パソコンを遊ぶ・
簡単プログラミング」という著書に付属のCD-ROMに収録されて
いるver.5.0.2です。
 エラーメッセージですが、
(はここには書けません.
)が必要です.
または
(はここには書けません.
というもので、
loop while(GetKeyState(32)<0)
の文の中の、Stateのeと次の(の間にカーソルがきます。

  │  ├青木様、修正版のプログラムですが、これも... に〜みや@四国急行電鉄 2004/06/21 21:49:47  ツリーへ

Re: 青木様、お返事が遅くなり、大変申し訳あり...
に〜みや@四国急行電鉄 2004/06/21 21:49:47
青木様、修正版のプログラムですが、これもエラーが出ます。
ENDはここには書けません.
LOOPが必要です.
という結果でした。
 という訳で、結局次のようにプログラムを修正してみました。
−−−−−−−−−−ここから−−−−−−−−−−
!鉄道模型スピード計測プログラム

set window -1,1,-1,1
plot text ,at -1,0:"注意点 マウスのボタンクリックは"
plot text ,at -1,-.1:"マウスカーソルがグラフィックウィンド(ここ)内にないと反応しない"

input prompt"縮尺":a
input prompt"距離":d
do
print"縮尺:1/";a
print"距離:";d;"cm"
print "スタートをどうぞ!"

!マウスの左ボタン押下待ちループ
do
mouse poll mx,my,ml,mr
loop until(ml=1)

LET start_time=time
beep

!マウスの右ボタン押下待ちループ
do
LET s=time - start_time
mouse poll mx,my,ml,mr
loop until(mr=1)

beep

print using"計測時間=##.##秒":s
LET v=d/s
print using"模型速度=##.##cm/s":v
LET va=v*A*.036
print using"実物換算=###.#km/h":va

loop while(GetKeyState32<0)

END

−−−−−−−−−−ここまで−−−−−−−−−−
 時間表示が流れていくのがうっとうしいので、「スタートを
どうぞ!」の表示から先は、何も表示しないようにして、計測
終了時に計測結果の中で通過時間も表示するよう変更してみま
した。
 まだ光センサ回路は組立中でまだ何とも結論を出す段階では
ありませんが、もし成功すれば、弊ホームページ上にてシステム
概要やこのプログラムについて公開したいと考えておりますが、
よろしいでしょうか?プログラム開発者として青木様のお名前を
出させてもらってもよろしいでしょうか?伏字にするなり、何ら
かのハンドルネーム的なものがあればそのお名前にて紹介させて
頂きたいと思います。システム開発にご協力、心から深謝致し
ます。ありがとうございました。

  │  │├青木様、今回はプログラム作成、ありがとう... に〜みや@四国急行電鉄 2004/06/21 22:28:54  ツリーへ

Re: 青木様、修正版のプログラムですが、これも...
に〜みや@四国急行電鉄 2004/06/21 22:28:54
青木様、今回はプログラム作成、ありがとうございました。本当
はちょっとここでお知恵を拝借して自力で何とかするつもりでし
たが、青木様の善意のお陰で手間が省けて助かっております。
ただ、ちょっとだけ自分で作ってみたかったかな・・・という気
はしますが。お気を悪くなさらないで下さいね。これからも忌憚
なきご意見、ご叱責を賜りますよう、よろしくお願い致します。

  │  ││└<<<書いちゃったことについて>>> 青木太一 2004/06/22 04:24:09  ツリーへ

Re: 青木様、今回はプログラム作成、ありがとう...
青木太一 2004/06/22 04:24:09
<<< 書いちゃったことについて >>>
> ただ、ちょっとだけ自分で作ってみたかったかな・・・という気はしますが。
おっと、楽しみを奪ってしまいました。すいません。
「計測信号のとりこみかた」を御質問のところを、勝手に
「MSX-BASICでやっているマウスを利用した方法を十進BASICに書き直したい」
というように誤読してしまい、書いてしまった次第です。ごめんなさい。

ちなみにご存じかもしれませんが、
十進BASICのヘルプには
「他のBASICとの相違」という項目がありますので、(残念ながらMSX-BASICとの相違はありませんが)
移植の際、参考になるかもしれません。

  │  ││ └ちなみに・・・ に〜みや@四国急行電鉄 2004/06/22 21:58:32  ツリーへ

Re: <<<書いちゃったことについて>>>
に〜みや@四国急行電鉄 2004/06/22 21:58:32
ちなみに・・・
MSXでは、マウスではなくジョイスティック(いわゆるファミコン
のコントローラみたいなものです)のポートを利用するもので
した。現在のDOS-V機に移植するに当たり、適当なモノがないか
検討したところ、USBマウスに目を付け、USB端子なら空きもあり
使えるのではと思い、書き込ませて頂いた次第です。

  │  │└修正版のプログラムなどについて 青木太一 2004/06/22 04:58:02  ツリーへ

Re: 青木様、修正版のプログラムですが、これも...
青木太一 2004/06/22 04:58:02
修正版のプログラムなどについて

http://freebbs.around.ne.jprqbsdc/wjpbqf.html#wjpbqf
を読んでいただければもう原因はおわかりでしょうが、一応書きます。

<<< 修正版プログラム? >>>
> 青木様、修正版のプログラムですが、これもエラーが出ます。
ん? 「修正版のプログラム」って

http://freebbs.around.ne.jprqbsdc/fsqjlj.html#fsqjlj
の最後に書いた4行のプログラムのことですか? それとも

> 時間表示が流れていくのがうっとうしいので、「スタートを
> どうぞ!」の表示から先は、何も表示しないようにして、計測
> 終了時に計測結果の中で通過時間も表示するよう変更してみま
> した。
のプログラムのことですか?

< 前者の場合 >
それは修正版のプログラムというより4行で完結しているエラー再現検証用プログラムです。
ver 5.0.2以下ならエラー内容は
> ENDはここには書けません.
> LOOPが必要です.
ではなく「(はここには書けません.」が出るはずなのですが...

< 後者の場合 >
> loop while(GetKeyState32<0)
としていますが、これはただ単になにも代入されていないので
値が0である変数「GetKeyState32」が0より小さいかどうかの比較判定で、
かならず偽になる無意味な判定ですね。
スペースが押されている判定にしたければ、
http://freebbs.around.ne.jprqbsdc/wjpbqf.html#wjpbqf
の後半を参考にどうぞ


<<< プログラム公開、名前表示 >>>
> もし成功すれば、弊ホームページ上にてシステム
> 概要やこのプログラムについて公開したいと考えておりますが、よろしいでしょうか?
> プログラム開発者として青木様のお名前を出させてもらってもよろしいでしょうか?
両方ともご自由にどうぞ。ハンドルは特にありません。

  │  └バージョンの問題でした。 青木太一 2004/06/22 04:34:49  ツリーへ

Re: 青木様、お返事が遅くなり、大変申し訳あり...
青木太一 2004/06/22 04:34:49
バージョンの問題でした。

<<< GetKeyStateのエラー >>>
わかりやすく詳細なエラー報告ありがとうございます。
GetKeyStateはver 5.0.3からの機能でした。
に〜みやさんのはver 5.0.2なのでギリギリアウトですね。

<<< GetKeyStateを使わない方法 >>>
だいたい同じ機能として「CHARACTER INPUT NOWAIT」
があるのでこちらでやってみてください。
元のコードから少ない変更で適用できますが、
に〜みやさんはご自分で書きたいようなので詳細は書きません。

そもそも最初から独自拡張である「GetKeyState」より規格に沿った
「CHARACTER INPUT NOWAIT」を用いた方がよかったかもしれません。
失礼しました。

ちなみに
最新版は他にもいくつかバグ修正も入っていることですし、
1MB程度のファイルを気軽にダウンロードできるインターネット環境でしたら、
最新版にするのもいいかもしれませんね。

ご質問、ご意見はお気軽にどうぞ。

  │   └ありがとうございます。お気を悪くなさらな... に〜みや@四国急行電鉄 2004/06/22 08:41:13  ツリーへ

Re: バージョンの問題でした。
に〜みや@四国急行電鉄 2004/06/22 08:41:13
ありがとうございます。お気を悪くなさらないで下さい。今、
十進BASICを最新版にアップデートしました。これからも忌憚なき
ご意見、ご指導をよろしくお願い致します。それから、青木様の
ページを拝見致しましたが、英語で書かれているのですね。
凄いなぁと思いつつ、興味深く拝見させて頂きました。
 さて、新たな問題ですが、鉄道模型をやっている人間というの
は、大抵が私も含めて個性の強い人間でして、中にはヒネくれた
者もおり、今のプログラムでは、左クリックに相当するセンサ
から右クリックに相当するセンサの方向に走るときのみ速度計測
が可能となっていますが、逆走された場合にも対処するように
プログラムするようにできるでしょうか。ヒントだけで結構なの
で、よろしければ私のわがままにもう少しだけ付き合ってもらえ
ないでしょうか。まだ十進BASICというものに触れて日が浅く、
文法とかもよくわかっていないんで・・・。昔はMSXでバリバリ
Z80のマシン語プログラムなんかを書いては遊んでましたが、
会社へ入ってから10年近く、プログラムの世界から離れていまし
たので、まだカンが戻っていないんです。よろしくお願い致し
ます。

  │    └<<<まず問題設定>>> 青木太一 2004/06/22 15:20:55  ツリーへ

Re: ありがとうございます。お気を悪くなさらな...
青木太一 2004/06/22 15:20:55
<<< まず問題設定 >>>
> 逆走された場合にも対処するようにプログラムするようにできるでしょうか。
なんとなくに〜みやさんがやりたいことはわかっているつもりですが、
http://freebbs.around.ne.jprqbsdc/goascn.html#goascn
> とりあえず、センサ回路側にR-SフリップフロップをかませばOKですが、
と書かれていて、なぜRSフリップフロップで解決するのか私はわからないので、
もしかしたら私はに〜みやさんのやりたいことえを誤解しているかもしれません。その場合ご容赦下さい。

ようするに、
・右ボタン押下で計測開始したときは、左ボタン押下で計測終了
・左ボタン押下で計測開始したときは、右ボタン押下で計測終了
したいってことですよね?

プログラムで対処することは可能です。

<<< に〜みやさんがつまずいているのはどこ? >>>
過度にヒントを出してしまわないように確認したいのですが、
に〜みやさんはアルゴリズムが思いつかないのですか?
それともアルゴリズムは思いついていてMSX-BASICでなら書けるけど、
十進BASICの文法がわからなくて書き下せないのですか?

> 十進BASICというものに触れて日が浅く、文法とかもよくわかっていないんで
を読むと後者のようだけど

> 10年近く、プログラムの世界から離れていましたので、まだカンが戻っていないんです。
を読むと前者のようです

もうちょっと問題点をしぼっていただかないと、
ヒントが出しにくいのです...
適切なヒントが提供できずごめんなさい。よろしくおねがいします。

  │     └<<<現在の問題点>>> に〜みや@四国急行電鉄 2004/06/22 18:47:22  ツリーへ

Re: <<<まず問題設定>>>
に〜みや@四国急行電鉄 2004/06/22 18:47:22
<<<現在の問題点>>>
 青木様、ありがとうございます。

>ようするに、
>・右ボタン押下で計測開始したときは、左ボタン押下で計測終了
>・左ボタン押下で計測開始したときは、右ボタン押下で計測終了
>したいってことですよね?

 そうです。そうしないとほぼ確実に逆走されて、挙句、「計測
できないじゃん」なんて言われるのがオチですから。

>アルゴリズムは思いついていてMSX-BASICでなら書けるけど、
>十進BASICの文法がわからなくて書き下せないのですか?

 MSX-BASICなら書けると思います。例えば・・・

−−−−−−−−ここから−−−−−−−−
10 KEY OFF:CLS:LOCATE 7,7:INPUT "縮尺";A
20 CLS:LOCATE 7,7:INPUT"距離(cm)";D
30 CLS:LOCATE 7,7:PRINT"縮尺:1/";A
40 LOCATE 7,8:PRINT"距離:";D;"cm"
50 LOCATE 7,11:PRINT"スタートをどうぞ!"
60 I1=STRIG(1):IF I1 THEN 80
70 I2=STRIG(3):IF I2 THEN 80:GOTO 60
80 TIME=0:BEEP:BEEP
90 LOCATE 7,11:T=TIME:S=T/60
100 PRINT USING"時間=###.##秒";S
110 J1=STRIG(3):IF J1 THEN 130
115 J2=STRIG(1):IF J2 THEN 130:GOTO 90
120 BEEP:BEEP:LOCATE 7,13:V=D/S
130 PRINT USING"模型速度=###.##cm/s";V
140 LOCATE 7,15:VA=V*A*.036
150 PRINT USING"実物換算=###.##km/h";VA
160 K=STRIG(0):IF K THEN 30:GOTO 140
170 END
−−−−−−−−ここまで−−−−−−−−

こんな感じで動くんじゃないでしょうか。今、手元にあるMSXが
まだ使える状態ではないので、検証はできませんが・・・。

  │      ├恐れながら、提示されたMSX-BASICプログラム... 青木太一 2004/06/22 23:41:36  ツリーへ

Re: <<<現在の問題点>>>
青木太一 2004/06/22 23:41:36
恐れながら、提示されたMSX-BASICプログラムは間違っていると思います。(私も検証環境はないのですが...)

重要な部分を抜き出すと
> 60 I1=STRIG(1):IF I1 THEN 80
> 70 I2=STRIG(3):IF I2 THEN 80:GOTO 60
>
> 80 TIME=0:BEEP:BEEP
> 90 LOCATE 7,11:T=TIME:S=T/60
> 100 PRINT USING"時間=###.##秒";S
>
> 110 J1=STRIG(3):IF J1 THEN 130
> 115 J2=STRIG(1):IF J2 THEN 130:GOTO 90
>
> 120 BEEP:BEEP:LOCATE 7,13:V=D/S
> 130 PRINT USING"模型速度=###.##cm/s";V

となっていますが、これでは
> ・右ボタン押下で計測開始したときは、左ボタン押下で計測終了
> ・左ボタン押下で計測開始したときは、右ボタン押下で計測終了
を実現できていません。かわりに

・右、または左のボタンが押下されたとき計測開始
・右、または左のボタンが押下されているとき計測終了
となってしまっています。これでは、どちらかのボタンを押した瞬間に
計測開始して、すぐに計測終了してしまいます。
(ボタンを押して計測開始した直後、プログラムが80,90,100行目を通過する
一瞬のあいだにボタンを離すことができれば、すぐに終了することはありませんが...)

おそらく
http://freebbs.around.ne.jprqbsdc/anutif.html#anutif
> 先に右クリックを押した状態になると、「ゼロ除算」のエラーが出ますね。
というのも、同じ問題によって計測が0秒で終了してしまうために
速度の算出のわり算が0除算を起こしてしまうからでしょう。

解決方法としては、たとえば計測終了判定に、計測開始をどちらのボタンで
行ったかという情報を利用するという方法が思いつきます。

間違ってたらごめんなさい。

あと、十進BASICの文法がよくわかっていないということですが、
具体的にどこの文法でつまづいているのかわからないので、
ヒントと言っても「十進BASICのヘルプは充実していますので、
ごらんになってはどうでしょうか」などという一般的なことしか言えません。

いかがでしょう?

  │      └実は私がパソコンを始めたのは今から約20年... に〜みや@四国急行電鉄 2004/06/23 00:06:37  ツリーへ

Re: <<<現在の問題点>>>
に〜みや@四国急行電鉄 2004/06/23 00:06:37
実は私がパソコンを始めたのは今から約20年前の私が小学生の頃
の事でした。別に親にせがんだ訳でもないのに、クリスマスの
プレゼントだと突然に父がMSXのパソコンを買ってきたのが私と
パソコンとの初めての出会いでした。最初はROMカートリッジの
ゲームで遊んでいましたが、MSX-BASICでプログラムが組めて、
自分で好きなようにソフトやゲームが作れる事を取説で知り、
以後、MSX-BASICでのプログラミングに夢中になりました。今、
木村先生の著書で十進BASICと出会い、再び初心に返ったような
気持ちでパソコンに向かえる自分が嬉しいのです。会社に入って
から10年弱の間、プログラミングからは遠ざかっていて、何だか
パソコンは仕事をさせられるイヤなプラスチックノハコだといつ
しか思うようになり、学生時代は熱心にフォートランとか、別の
言語を勉強してみたり、MSX-BASICで自作のZ80マシン語モニタ
ソフトを作り、ハンドアセンブルでコーディングしながらせっせ
とプログラムを組んではデバッグし、完成したら独り悦楽に浸る
というようなのんきな事をやってましたが、パソコンが単なる
仕事の道具に過ぎなくなり、システムもどんどん進化しては複雑
となって、私はコロコロ移り変わり次々に早いペースで進化して
いくパソコンを勉強するという事に何だか無意味さを感じて、
それで情報処理の勉強をしなくなりました。私は某国立工業高専
の電気工学科卒業なんですが、電気科の同期の中ではプログラミ
ングにおいては常にトップの成績を誇り、情報処理の担当教授の
W先生は、今度の定期試験ではに〜みやには100点は取らせんぞ!
などと度々挑発されたりもしました。しかし、いくらW先生が裏
をかいた問題を出しても私は常にパーフェクトな回答を出しまし
た。5年生になり、W先生は私を自分の研究室に呼び寄せました。
卒業研究はW先生の下でSpiceというカリフォルニア大学バーク
リー校の開発した電気回路のシミュレータでパワーエレクトロニ
クス用のIC等の設計をする研究に打ち込みました。私はW教授の
期待に応えるべく寝食を忘れて研究に没頭しました。Pspiceと
いう電子回路解析シミュレータにたまらない魅力を感じた事も
あり、1日のうち20時間を研究に費やし、1時間は食事や風呂に、
残りの3時間だけが睡眠時間という生活がほぼ1年間続きました。
Spiceシミュレータは大変面白いソフトで、ちょうど幼児が新しい
玩具を与えられて喜んでそればかりに夢中になるがごとく、私は
Spiceシミュレータの世界にのめりこみました。そして、卒研発表
も無事終えた打ち上げの宴の席で、W教授は私に、「今年のSpice
班は近年稀に見る大きな成果をあげた。に〜みや君、君は既に私
より遥かにSpiceに詳しくなった。今度、時間を作って私に使い方
から全て教えてはもらえないだろうか」と言われ、大変感激した
事をつい最近の事の様に思い出します。私は無事、W教授の期待
に応える研究成果をあげる事ができたのでした。
 多少、内容が自慢になって申し訳ないのですが、私の能力は
ざっとこんなトコロです。アタマの中はまだ10年前の古いままで
更新が途絶えたままの情けない男ですが、今後ともよろしく
お願い致します。

  昔にMSX-BASICを使っておられたのなら10進...2004/06/20 09:44:08  ツリーへ

Re: 鉄道模型のスピード計測ソフトを作っているのですが。
2004/06/20 09:44:08
昔にMSX-BASICを使っておられたのなら10進BASICもそんなに難しく無いと思いますし、
むしろ構造化言語になっているので、少し勉強すればプログラムはずっと楽になるはずです。

どうしても昔の仕様のものが使いやすいなら99BASICがあります。
一部命令の書き換えが必要ですが、MSX-BASICの仕様を取り入れていますし、マシン語にも対応しています。

  │└今回は青木様のご好意で他力本願になってし... に〜みや@四国急行電鉄 2004/06/21 22:25:28  ツリーへ

Re: 昔にMSX-BASICを使っておられたのなら10進...
に〜みや@四国急行電鉄 2004/06/21 22:25:28
今回は青木様のご好意で他力本願になってしまいましたが、これ
から十進BASICをボチボチ勉強していきたいと考えております。
これからも忌憚なきご意見をよろしくお願い致します。

  センサがRS-232Cポートに接続するものであれ... 白石 和夫 2004/06/20 18:40:59  ツリーへ

Re: 鉄道模型のスピード計測ソフトを作っているのですが。
白石 和夫 2004/06/20 18:40:59
センサがRS-232Cポートに接続するものであれば,利用可能です。
また,そうでない場合でも,仮想的にCOMポートとしてアクセスできるようなデバイスドライバがあれば,使えます。

  │└開発者の白石先生自らコメントを頂き、恐縮... に〜みや@四国急行電鉄 2004/06/21 22:20:15  ツリーへ

Re: センサがRS-232Cポートに接続するものであれ...
に〜みや@四国急行電鉄 2004/06/21 22:20:15
開発者の白石先生自らコメントを頂き、恐縮の極みです。これは
入力信号の数も少ないので古いボールマウスを解体してそれを
利用する案でいきますが、例えば、複雑な線路配置のレイアウト
の中を複数の列車が動くような場合、これらに対する信号機や
制御を行うという事になれば(実物で言うところの列車集中制御
システムです。)RS-232Cポートを利用して、それぞれの信号機や
線路の分岐、本線区間・側線等にアドレスを割り振ってシリアル
信号にて集中制御できるでしょうね。そこまで発展させればまた
違った世界が拓けてまた楽しみが増えるのでしょうね。また、
何かありましたら忌憚なきご意見をよろしくお願いいたします。
青木様にはこう言ってしまったら失礼ですが、今回は他力本願に
なってしまい若干不本意です。次は何か自力で作ってみたいと
考えております。またよろしくご教示下さい。

  逆走された場合の処置として・・・ に〜みや@四国急行電鉄 2004/06/22 00:21:03  ツリーへ

Re: 鉄道模型のスピード計測ソフトを作っているのですが。
に〜みや@四国急行電鉄 2004/06/22 00:21:03
逆走された場合の処置として・・・
センサ1がマウスの左ボタン、センサ2が右ボタンとして、
センサ1から2へ走ると仮定してプログラムを考えてきましたが
もし、逆走してセンサ2(右)からセンサ1(左)へ走られた
場合、左右どちらかのボタンが押された場合に計測を開始し、
反対側のボタンで計測終了とするには、

do
mouse poll mx,my,ml,mr
loop until(ml=1 or mr=1)

のようにorの条件を設定できるのでしょうか?一度自分でも試し
てはみますが・・・。

   └早速試しにやってみましたが、先に右クリッ... に〜みや@四国急行電鉄 2004/06/22 00:28:46  ツリーへ

Re: 逆走された場合の処置として・・・
に〜みや@四国急行電鉄 2004/06/22 00:28:46
早速試しにやってみましたが、先に右クリックを押した状態に
なると、「ゼロ除算」のエラーが出ますね。センサ回路側で対応
するしかないのでしょうか?う〜ん、何か1つ位は自分で解決
したいなぁ・・・。

    └とりあえず、センサ回路側にR-Sフリップフロ... に〜みや@四国急行電鉄 2004/06/22 01:36:28  ツリーへ

Re: 早速試しにやってみましたが、先に右クリッ...
に〜みや@四国急行電鉄 2004/06/22 01:36:28
とりあえず、センサ回路側にR-SフリップフロップをかませばOK
ですが、プログラム側で解決可能な課題でもあるように思います
ので、とりあえず自分で考えてみます。しばらく答えの書き込み
はご遠慮頂ければ幸いです。少し自分で考えてみます。

     └ごめんなさい、コレは私の勘違いです。 に〜みや@四国急行電鉄 2004/06/22 21:55:00  ツリーへ

Re: とりあえず、センサ回路側にR-Sフリップフロ...
に〜みや@四国急行電鉄 2004/06/22 21:55:00
ごめんなさい、コレは私の勘違いです。


このノートはこれ以上発言できません。
新しくノートを作成 して、続きを書いてください。

インデックスへ EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。