デジタル鉄道模型フォーラムDCC・メルクリン等のデジタル鉄道模型の話題でコミュニケーションできる場です。登録・利用は無料です。
デスクトップステーション(DesktopStation)のページはこちら
・無料の日本型超高品質DCCサウンドデータをWebで配布中!
・鉄道模型をスマホで簡単制御!国産で革新的なコマンドステーション DSair2はこちらから。

2019年02月14日

DSbasicのプログラミング

DSair2の新機能であるDSbasicの使い方をご紹介します。
2019年2月14日現在、r2j TEST12で、ご利用頂けます。

DSbasicは、DSair2の裏機能であるS88-Nのコネクタを有効にすることで、絶大な効果を発揮します。
S88-Nは、欧州で標準の線路上の車両を検出するためのシステムで、メルクリンが開発したものがオープン化されて今に至っています。日本と欧州では在線検出システムとしてデファクトスタンダードになっています。日本でも通販でサードパーティーの機器が安価なキットで入手可能です。

DSair2でS88-Nを有効化するには基板に部品を追加する必要があります。基板上のCN7に、秋月電子で売っているRJ45コネクタ(7810-8P8C, C-00159)を別途購入し差し込んで半田付けし、ケースをくり抜くことで使用可能になります。元々、オープンにするつもりはありませんでしたが、私がBASICにハマってしまった以上、使わないわけにはいきませんし、自動運転用には必須のコネクタですので、今回、裏機能として公開させて頂くに至りました。

dsair2_fsmpl_test2.jpg

さて、DSbasicと銘打って開発を進めておりますが、BASICというプログラミング言語には、方言がいくつかあり、私はN88 BASICをよくいじってましたが、マイクロソフトのQuickBasicをいじっている方もいらっしゃったと思いますし、F-BASIC等、マニアックなものもあったと思います。癖がいろいろあり、人によっては、解釈が異なるかも知れません。

DSbasicで採用しているBASICも、JavaScriptに内部で変換処理を行っている都合上、本来のBASICよりもかなり拡張されている部分があります。基本的には、wwwbasicの文法・ルールをそのまま適用して頂きたいですが、参考にする実例やサンプルが無いと分からん、ということですので、基本的なものをここに紹介します。

■参考となるプログラム例

wwwbasicのページに、examplesが紹介されており、基本的には私もここを見ながら、プログラムを入力しています。

■おまじない

プログラムの最初に、
screen(7)
を書くと、文字が大きくなり見やすくなります。

■文字表示

print命令を使います。

print "HelloWorld!"

変数を足したいときは、単純に以下のようにすればOKです。iは数字とします。セミコロン(;)で区切ってもOKです。

print "Number is " + i

■変数

突然、使い始めて問題ありません。

xx=999
print xx

こんな感じで、好きに使えます。

■ for

繰り返しは、以下のようにforとnextで記述します。BASICでは一般的な書き方ですね。

--------------------
FOR i = 1 to 10
PRINT "Counting "; i
NEXT i
--------------------

■ if

ifは、「もし〜〜ならば、end ifまでを実行、という処理です。基本的には、S88センサのチェックや、ポイント状態(getacc)の確認で多用すると思います。

--------------------
if getacc(1)=1 then
if getacc(2)=0 then
print "route=A"
acc 2,1
acc 3,1
end if
end if
--------------------

■ while

whileは他のプログラミング言語で同様ですが、whileのコマンドに指定した式(以下ではs88get(1)=0)が、真(=成り立ってる状況)であれば、whileとwendの間の処理が、永遠に続くという命令です。
もし、s88get(1)=1になったら(つまりS88センサが車両を検出したとき)、この処理は終了し、wendの次の命令が動きます。

--------------------
while s88get(1)=0
print "RUN!"
sleep 1000
wend
--------------------

■goto

プロの世界では「絶対に使ってはいけない」と念を押されるGOTO文。趣味なら困る人も居ないですから、別に構わないですし、そもそも論としてアセンブラなんてGOTOの嵐ですからねえ・・・。
BASICはそれほど高級言語(値段が高い、という意味では無く、機械語に近いか遠いかの意味です)、という立ち位置ではないと個人的には思ってます。

--------------------
Again:
print "XXX"
GOTO Again
--------------------

■整数化

INT関数を使って、浮動小数点変数を整数に変換できます。

xx=INT(10.234)

■算術系

Math関数も、定義されていて使えます。

log, sin,cos,tan,atn,exp,abs,sqr,atan2

■大文字小文字などの変数型の変換処理

大文字へ変換は、ucase$
小文字へ変換は、lcase$
数値型から文字列型へ変換は、str$
文字列型から数値型へ変換は、val

■他にも

実はこのBASIC、何度も書いてますが、実行する際にBASIC→JavaScriptに変換してから実行するので、超高速です。また、JavaScriptの機能をまんま使えるので、かなりリッチなBASICになっています。

・関数を定義してコールできます
・構造体・クラスがBASIC的に使えます。
・配列も使えます
・型も定義できます
・マウス、キーボードの入力もできます(私はまだ理解できてませんが)

つまり、何でも出来てしまう最強BASICということです。これがスマホ上で動かせて、DCC車両も動かし放題、S88で在線検出もできる、ポイントも動かせる、というのがポイントです。
SDカードに作ったソフトをBASファイルで置いておいて、スマホ画面上で読み出して実行すれば、自動運転も、運転操作の自動支援も、一通りのことができます。

イベントスクリプトなんていう、非常に制限された環境から完全に解放されたのです。ぜひともDSair2で、DSbasicを駆使して、自分が納得できる鉄道模型の動かす環境を構築できればと思います。
posted by yaasan at 19:59 | Comment(1) | 鉄道模型
この記事へのコメント
DSMain購入したばかりですが、DSAir2も欲しくなってきちゃいました(汗)
Posted by 浜えるも at 2019年02月17日 22:06
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。