SSブログ

DSBasicを試す

 DSBasicの基板をYaasan様からいただきましたので、レビューです。
 Arudinoでビデオが映って、Basicが動くのはちょっと感動です。

 部品は鉄道模型市に行った帰りに買ってましたが、やっと組み立てました。なんで水曜かというと、先週は土曜日まで働いたので、代休です。
DSBasicの試作版
DSBasicページを開設
DSBasicWiki
あたりを斜め読みしながら作成です。
 まず、PS2をパターンカットします。あとは説明通りに組み立てていきます。Arduinoとの接続ピンが多くて、結構面倒です。部品点数は少ないので割とすぐに組みあがりました。
 で、DSBasicスケッチをコンパイルしようとしてまず引っかかりました。
 なんと、"DSbasicフォルダのDSBasic.inoが見つかりません。”と、かなり使えない人のようなエラーが表示されます。フォルダに日本語が含まれるからか?とかArudinoのバージョンか?とか悩みましたが、まあ、文字通り、フォルダ名のDSbasicとファイル名のDSBasicと、大文字のBと小文字のbで開発環境が引っかかっているようでした。で、適当にどちらかにそろえたら普通にコンパイルが通りました。(Arduino1.6.8)
 Arduinoと重ねるとUSB_BとPS2の端子が短絡するので、ショート対策で養生テープを張っておきました。
re_DSC00791.jpg

 で実装した完成写真。間違っています。
re_DSC00790.jpg

 どこが間違っているかというと、書き込むスケッチです。
 正しくはDSBasic基板にはDSCoreのR217を書き込みます。
 ArduinoにはDSBasicのスケッチを書き込みます。
 最初、DSBasicの基板に必死にDSBasicのスケッチを書き込んで動かないなあと悩んでました。もちろん、Yaasan様のページを見るとちゃんとそういう風に書いてあるような気がしますが、もちろん斜め読み人間の私は気づいていません・・・。
 で、R217の書き込みはHexファイルなので、遠い記憶で書き込んで、(でもなぜか一回失敗した)、とりあえず、ビデオとPS2キーボードは動くようになりました。もちろん、ほかの書き込み方はYaasan様のページに載っています。自分のやりやすい方法でやるのがいいと思います。
 そして、次は、モニターを見ながらPWR 1とかコマンドラインで電源Onとかすると”Expr error"とでます。Yaasan様の立ち上げ途中の記事の写真ではそのようなエラーは出ていません。(たぶん、最新のスケッチじゃないんだろうなあと思いながら)、一応ソース見たら、void loop()内のDCC関連の命令だけ、ちょっとほかの命令と処理が違うようなので、ほかの命令と似たようにしておきました。(詳しく見ていないので、正しいかどうかは不明ですが、エラーはでなくなりました。)
やったところですが、(下記はpowerのところだけです。それ以外のDCC命令も同様に処理する必要があります)
<もともと>
----
/* Add DCC function */
dcc_power:
{
unsigned int x;
unsigned int y;

// Work out where to put it
x = checkParm();
if (stopFlag==true)
goto prompt;

Gateway.SetPower(x);
}
----
<修正>
----
/* Add DCC function */
dcc_power:
{
unsigned int x;
unsigned int y;

// Work out where to put it
x = checkParm();
if (stopFlag==true)
goto prompt;

Gateway.SetPower(x);

// Check that we are at the end of the statement
if(!check_statement_end())
goto syntaxerror;
}
goto run_next_statement;
----

と、後ろのほうにおまじない系のGoto文を追加しております。

で、これでめでたく動くようになりましたので、
次は、DSBasic部分のプログラムです。
今回はキーボードから電車のスピードを制御する適当プログラムを組みました。
命令セットはスケッチをみるか、DSBasicその2に書いてあります。
----
5 c=50
10 a = inkey(0)
20 if a=-1 goto 10
30 if a=43 b=b+c
40 if a=46 b=b-c
45 if b<=0 dir 7,0
46 if b>0 dir 7,1
50 spd 7,abs(b)
60 print "speed",b
70 goto 10
----
プログラムの説明ですが
5 加速は50ずつとしてcに代入
10 キーボードからの入力をaに代入
20 キーボードからの入力がなかったら10行目に戻る
30 押されたキーが"+"だったら速度Bを+cする
40 押されたキーが"-"だったら速度Bを-cする
45 速度Bが-なら列車の方向をFWDにする
46 速度Bが+なら列車の方向をREVにする
50 速度Bを列車に設定する。
60 モニターにスピードを表示する
70 10行にもどる。
プログラムの強制終了はよくわかりませんが、”PageUp"ボタンでした。

で、動画です。(たぶんあまり面白くない)
なんかこの組み方だと、ちょっとキーボードの反応が悪いようです。


次はS88部分が実装されたらもうちょっとやりたいと思います。

コメント(2)  トラックバック(0) 

コメント 2

yaasan

バグでご迷惑をおかけしてすみません。スケッチは修正版を上げました。
またS88も、実装開始してます。ちょっと制約がありますが(接続台数は2台くらいまで)いけそうな感じです。

by yaasan (2016-07-13 21:27) 

fujigaya2

スケッチ修正ありがとうございます。
S88実装できましたら、ぜひ教えてください。
Maker Faireに間に合いそうなら、自動運転をS88絡めてやってみたいと思います。
by fujigaya2 (2016-07-13 23:11) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0