怪盗列車(旧・本館)

混ぜると危険!萌え鉄スタンドマンの断末魔の叫び
<< January 2019 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 >>

スポンサーサイト

一定期間更新がないため広告を表示しています

- | permalink | - | -

IchigoJamでシューティングカウンター

IchigoJam Shooting Counter
↑クリックすると大きくなります。

IchigoJamで、あの、シューティングカウンターを作ってみました。
シューティングカウンターといえば、あの、一世を風靡したシューティングウォッチ(通称「シュウォッチ」)が有名ですが、それをIchigoJam BASICで書いてみようという安易なネタです(^^;。しかも最大限に最適化して地味にバージョンアップ(初版はv1.00)、カウントルーチンはこれ以上短くならないぞというところまで詰めました。

スクリーンショットでは、どのくらいまで無理が出来るかを見るために、とんでもないカウント数になっていますが、気にしないでください。ちなみに、高橋名人ばりの秒速16連射はかなりきついので、皆さんも試してみてください。


※IchigoJam v0.9.7用とありますが、実際にはv0.9.3でも走ると思います。
IchigoJam | permalink | comments(0) | trackbacks(0)

IchigoJamで学ぶビット演算

IchigoJamで論理演算1
↑クリックすると大きくなります。

IchigoJam BASICで、16ビットの数字をバイナリ表示するプログラムを組んでみました。

PICなどのマイコンでは、ポート指定がchar型であることが多く、ポート1つだけONにしたいのにどうしようということがあります。ここで「論理演算」なるものが必要になるのですが、そんなのわからない(私もそうです)ので、適当に数字を打ち込んでバイナリ表示してもらえれば楽ちんというわけで、変換プログラムの登場です。

論理和(OR)は難しいことではなく、画面の通り、単純に足し算です。

排他的論理和(XOR/ExOR)は「和」と書いてあって足し算に見えますが、実は単純な引き算です。普通の四則演算と違うのは、大きいものから小さいものを引くというルールがあることでしょうか。

ほらほら、怖くなくなってきました。


IchigoJamで論理演算2
↑クリックすると大きくなります。

問題は論理積(AND)です。
普通に演算するとよくわからないのですが、2つの数字をともにバイナリ変換してみるとよくわかります。バイナリ変換したものを並べ、同じビットがともに1になるものを残し、残りは0にしてしまうというものです。仕組みは簡単、ビットごとに数字をかけ算しているのです。要は0×0=0、1×0=0、0×1=0、1×1=1です。ちょっと手強いでしょうか。


IchigoJamで論理演算3
↑クリックすると大きくなります。

ちなみに変数が16ビットの場合、排他的論理和(XOR/ExOR)の片側の引数を255にすると、すべてのビットが反転します。論理演算では否定とかNOTといわれるものです。

論理演算が怖いという方への一助となれば幸いです。
IchigoJam | permalink | comments(0) | trackbacks(0)

IchigoJamの変数

IchigoJamの変数仕様
↑クリックすると大きくなります。

IchigoJamの変数について、実機(v0.9.7)で調べてみました。
公開されているのは、変数はA〜Zまでの26個と、配列変数(0〜100までの101個)が1つということです。

結果から言うと、-32768〜32767までが有効範囲で、整数のみ使用可能です。範囲外の整数を入れると、先の数字の間でループし、正しい数字になりません(画面)。これは、マイコン用C言語の変数仕様によく似ています。

画面にありませんが、例えば「LET A,1.1」などと小数のある数字を入れると文法エラーで跳ねられます。これですと割り算の時に困ることがありますので、割り算の余り(剰余)を返す演算子が用意されています。かつてのN88BASICでは「MOD」でしたが、IchigoJam BASICではC言語と同じように「%」です。

IchigoJamで小数点つき割り算
↑クリックすると大きくなります。

小数点演算は、プログラムをすることで実現できます。小数点第2位まで欲しい場合はこのように100を掛けて、最後に100で割り、剰余を計算して表示させます。
IchigoJam | permalink | comments(0) | trackbacks(0)

IchigoJamのIN文、OUT文

IchigoJamのIN文、OUT文は、引数のあるなしで振る舞いが変わります(v0.9.7の場合。それ以前は未検証です)。

●引数がない場合は一括指定

PRINT IN()
・・・とした場合、IN1×1+IN2×2+IN3×4+IN4×8の答えが表示されます。

OUT 9
・・・とした場合は1+8として処理され、OUT1とOUT4がONになります。


●引数がある場合は個別指定

PRINT IN(4)
・・・とした場合、IN4ポートの状態によって1か0が返ります。

OUT1=1
LET OUT1,1
・・・とした場合は、OUT1ポートがONになります。
IchigoJam | permalink | comments(0) | trackbacks(0)

IchigoJamのBEEP文

IchigoJamのBEEP文は、単に「BEEP」とすれば「ピッ」と鳴りますが、時には音程や長さを変えたい場合もあるでしょう。というわけで、少し実験して調べてみました。


●デフォルトは「BEEP 10,2」

IchigoJam v0.9.7では、デフォルトの「BEEP」は「BEEP 10,2」と同じ音程、同じ長さになっているようです。引数のうち「10」の方は音程で、数字が大きいと音程が下がり、小さいと上がります。引数の「2」の方は音の長さで、1/60秒単位とのことですから、60とすれば約1秒鳴り続けることになります。


●バックグラウンドで処理される

IchigoJamのPLAY文と同じように、BEEP文もバックグラウンドで処理されます。鳴っている間ハンドルされることはありません。


●後から命令した方が有効

PLAY文、BEEP文は、今鳴っているものに関係なく、後から命令された方を処理しようとします。例えばPLAY文で音楽をかけているとして、鳴っている間にBEEP文やPLAY文を実行すると、その時点で鳴っていた音楽を止め、後から実行したBEEPやPLAY文を実行します。
IchigoJam | permalink | comments(0) | trackbacks(0)

IchigoJamでMML再生

IchigoJamでMML
↑クリックすると大きくなります。

IchigoJamには、単音のビープ音の他に、やはり単音ながらMML(ミュージック・マクロ・ランゲージ)を再生する機能があります。必要なハードウェアは圧電サウンダーのみで、かつてのPC-9801シリーズのような、PC-9801-26Kや同-86などの拡張ボードは必要ありません。また、同シリーズのPLAY文は再生終了まで命令文が動作をホールドしますが、IchigoJamは譜面をバッファーに取り込むと、譜面がある限りバックグラウンドで再生します。

IchigoJam v0.9.xまでは音程に不安定さがあり音を外すようなのですが、v1.0.x以降では内部ルーチンを工夫したようで綺麗な音色になって、さらに高い音も出せるようになっているそうです。

なお画面のプログラムでは、名鉄(名古屋鉄道)の特急車・パノラマカーなどに搭載されているミュージックホーン、小田急電鉄の特急ロマンスカーに搭載されているミュージックホーンのほか、JR北陸本線の駅に備えられている列車接近を知らせる音楽のうち、「アニーローリー」の一節を収録しています。
IchigoJam | permalink | comments(0) | trackbacks(0)

IchigoJamでアナログ入力

IchigoJamでアナログ入力
↑クリックすると大きくなります。

IchigoJamにはアナログ入力が1系統あり、分解能は10ビット(0-1023)です。端子は「IN2」を使用していますが、ここには3.3V以上の電圧をかけてはいけません。分流抵抗を入れたりダイオードなどで保護回路を組むなど、せっかくのマイコンボードを壊さないよう、くれぐれもご注意ください。

画面では、IN2に何もつながずにプログラムを走らせたものです。


※注意:IchigoJam v1.0.0-betaより、ANA()のままですと「BTN」端子のものを拾うようになるそうです。
 上記バージョンの場合は、ANA(2)としてください。
IchigoJam | permalink | comments(0) | trackbacks(0)

IchigoJamでLチカ

NEC BLINK
↑クリックすると大きくなります。

IchigoJamは、1,500円(キット)で販売されている格安のBASICスタンドアロンマイコンボードで、「PS/2キーボード」「コンポジット入力のあるテレビ」(=赤白黄の端子のうち、黄色の端子があればOK)「スマホ充電器などのmicroUSB電源」があればパソコンなしで動作します。
普通、ディスプレイのあるマイコンでの動作確認は、例えば

10 PRINT "Hello World!"

などという、画面に文字を出すプログラムを書くことが多いのですが、マイコンボードであり、しかもLEDやボタンスイッチがありますので、そのLEDを借りてマイコンボードらしいことをしてみます。通称「Lチカ」では、およそ1秒ごとにLEDの点灯・消灯を繰り返すものが多いのですが、ここはかつて一世を風靡したNEC PC-9801シリーズの文字点滅を真似て、1.5秒点灯・0.5秒消灯という点滅にしてみました。また、ただ単に点滅するだけでも良いのですが、キー入力やボタン押下でプログラムが停止するようにルーチンを組んであります。

あまり複雑なことはできませんが、打ち込んだプログラムをすぐに試せるのがIchigoJamの大きなメリットと思います。
IchigoJam | permalink | comments(0) | trackbacks(0)

IchigoJamでキーボードキーヤーを作れるか

キーボードキーヤープログラム
こどもパソコンとして一世を風靡しているBASICマイコンボード「IchigoJam」ですが、PS/2キーボードとテレビを接続しスタンドアロンで走ることを活かして、アマチュア無線で使用できるキーボード入力のエレキー・キーボードキーヤーのプログラムを考えてみました。

当初は、入力されたキーをベースにGOSUB文でひたすら長点・短点のサブルーチンに飛ばすものを組みましたが、いかんせん1kBという壁が大きく、入りきりません。
何か良い方法はないかと考えた結果、まず、配列変数が1つあることを利用して、そこにキーのデータを入れることを思いつきます。しかし今度は、そのデータを頭から使うには計算が増えることが判明、データは逆順で入れることにしました。例えば「A」は「・−」ですが、逆向きの「−・」にしてデータ格納しています。それを演算処理すれば簡単というわけです。
もう1つの問題は、「?」などの6符以上ある場合です。変数の仕様を確認したわけではありませんが、おそらく0-6
5535であろうと容易に想像ができます。すると6符は入りません。そこで別の作業ルーチンを用意し、似たような符をデータから拾い出し、くっつけて対応しています。
動作は、本体のLEDを点滅させることで確認しましたが、実装時には「LED」コマンドを「OUT」コマンドに変更し、ここにフォト・カプラなどを介して無線機のキー端子につなぐことを検討しています。

というわけで、「IchigoJamでキーボードキーヤーを作れるか」の答えは「作れる」が正解です。

--------

(2015.-5.-9 追記)

・恐れ多くも、IchigoJam公式サイトの、プログラム作品例の欄よりリンクを頂いています。

・プログラム内に若干のバグがあり、キャラクタコード101番以降のキーを入力するとエラーになります。INKEY()コマンドの後ろで、拾ったキャラクタコードが101番以降の場合にINKEY()に戻すことで回避できます。

・送出速度は固定になっていますが、WAIT文の数字を加減することで変更することが出来ます。また、WAIT文の数字を変数にすることで、タイプ中に可変する要素も残されています。

・本プログラムはIchigoJam v0.9.7以降にある、配列変数の一括指定を活用しています。v0.9.3ではエラーになりますので、パソコンとUSB-シリアル変換を使用してIchigoJamをアップデートする必要があります。
続きを読む >>
IchigoJam | permalink | comments(0) | trackbacks(0)
 1/1pages