« 2008年1月 | トップページ | 2008年3月 »

2008年2月

ROBOBASIC講座(FOR...NEXT)

【FOR...NEXT(フォー...ネクスト】
 変数が終了値になるまで反復処理をする。
 構文: FOR [変数] = [初期値] TO [終了値]
                        [反復して処理する実行文
            NEXT [変数]
        例:    FOR i=0 TO 9
                            a=a+1
                    NEXT i

  • FORの変数とNEXTの変数が異なっているとダメ(書き間違えない様に)
  • 1づつのカウントアップできない
  • カウントダウンできない
  • FOR〜NEXTの中の実行文の中で、変数の値や、終了値を変更させられない
  • FOR〜NEXTの中からGOTOで抜け出してはいけない

などの決まりがありますので注意して下さい。
さて、何を今になって!という感じですが、ROBOBASICのプログラミングにおいて、どの様に式を立てればいいのかについて、今回は話したいと思います。

《代入(計算式)その1》
プログラムでの式の書き方は、関数の式の「y=f(x)」のように、計算結果が最初に来る書き方をします。従って、左辺には式を書くことはできません。計算式には、算術演算子またはビット演算子を用います。今回は、算術演算子についてまとめます。

算術演算子には、「+」、「-」、「*」、「/」の四則と、「%」の余りを求める演算子があります。ROBOBASICの型には負の数値を扱える型がありませんし、以前書きましたが、型の範囲を超えてしまう場合の注意を払って下さい。また、小数点を扱える型がありませんので、割り算の結果は切り捨てになります。一般にコンピュータにおける常数の割り切れない場合の扱いは四捨五入でなく切り捨てですのでpaper 従って、割り算の場合は、「/」が商で、「%」が余りということで、それぞれを求めることができるのです。

Pagesscreensnapz010

あと、もうひとつ重要なことがありまして、ROBOBASICの算術演算子には優先順位がないということです。かけ算、割り算を先に計算するのではなく、常に、頭から計算していきますので、この辺も考慮して式を立てる必要があります。

いちおう、ここまでのことをふまえて、

a = 4 * 5 / 10


a = 5 / 10 * 4

の答えは同じでないのでpaper

それぞれいくつになるか分りますよねsign02
気をつけてねsign01


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

RZ1Disguise v0.1.2 公開

Rs2rz13_2RZ1Disguise v0.1.2 公開しました。

(RZ1Disguiseは、roboScriptからプログラミング・シミュレータまたは、プログラミング・シミュレータからroboScriptまたはroboBASICファイルに変換するソフトウエアです)

デアゴのロボザックのページの掲示板でプログラミング・シミュレータのデータをroboBASICで動かす場合、のWAITの値、roboBASICでは、DELAYの値を1.7倍程度にするとよいということを知り、その変換に対応した。
Realbasic_2007screensnapz002

ダウンロードはこちらから

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

ROBOBASIC講座(IF...THEN...)

【IF...THEN...(イフ...ゼン)】
 条件を判断し、条件が一致した場合の処理を行う

 構文

単一条件判断
     IF [条件式] THEN [条件が一致した場合の実行文] 

復号条件判断

     IF [条件式1] THEN
      [条件1が満たされた場合の実行文]
     ELSEIF [条件式2] THEN
      [条件2が満たされた場合の実行文]
     ELSE
      [条件1,2以外の場合の実行文]
     ENDIF


《条件式》
ROBOBASICで使える演算子は、算術演算子、関係演算子、理論演算子、ビット演算子の4種類があります。IF文の中では、条件を満たしている(真)場合と、条件を満たしていない(偽)場合を判断する為の式を作る必要があります。その「真」と「偽」を計算する為の演算子は、関係演算子または理論演算になります。

関係演算子は、「= 」、「<>」、「<」、「>」、「<=」、「>=」を用いて、右辺と左辺を比べます。これはそんなに難しくないですよねsign02IF文の中では、下の表のように、IFとTHENの間に、これらの演算子を用いて式を作ります。ちなみに「=」は、条件式では同じかどうかを比べている訳であって、代入される訳ではありませんよ。それから、見た目同じ意味になるかと思いますが、「=<」、「=>」のように反対にしてしまうとコンパイルが通りませんので注意して下さい。
Pagesscreensnapz008_3


理論演算子は、「AND」、「OR」、「XOR」がROBOBASICでは利用できます。この演算子は真、偽を計算するものになります。表の様に、真を1、偽を0として考えると解りやすいかもしれません。「AND」は両方が真なら「真」、「OR」は少なくともどちらかが真なら「真」、「XOR」はどちらかが真ならば「真」になります。ちょっと意味合いが違うかもしれませんが、集合で言えば、「AND」は、我々の時代(っていつや!?)では、「AキャップB」、今は、「AインターセクションB」ですね。「OR」は、「A カップ B」、「AユニオンB」になります。余計にややこしくなっちゃいましたかねsweat01
Pagesscreensnapz006

この表の例で、XとYと書きましたが、ROBOBASICには、真偽の型がありませんので、XやYは、上で書いた関係演算子の式を使います。

例:IF A=0 AND B>120 THEN


今回は、条件式について話ましたが、今回出てきた「=」、「AND」、「OR」、「XOR」は、算術演算子、ビット演算子としても使われる演算子なので、式の中で、これらを見た時、どんな演算子として、これらが利用されているのか間違えない様にして下さいねdanger

 

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

ROBOBASIC講座(DIM...AS, CONST)

【DIM...AS (ディム?...アズ)】
 変数を宣言する(DIMはDimentionの略)
 構文:DIM [変数名] AS [変数型]
 例: DIM A AS BYTE     BYTE型でAを宣言
    DIM B AS INTEGER  INTEGER型でBを宣言

【CONST(コンスト?)】
 定数を宣言する(CONSTはConstantの略)
 構文:CONST [定数名] = 数字
  例:CONST ID=0


今回は、数値、変数および定数についてです。プログラミングの基本なので、マニュアルを見て頂ければOKです。かなり重複するところもあると思いますが、いちおう書いておきます。

《数の表記》
一般に使う、10進数以外に、2進数、8進数、16進数を扱うことが出来ます。10進数以外の場合は、それが何進数かを表す記号を数値の前に付けます。その記号は「"&"+英語の頭文字」なので、ついでに英語でなんというのかも覚えてしまいましょう!ちなみにHexadecimalの Hexa- はヘックスレンチ(六角レンチ)とか、テレビ番組のヘキサゴンとかで耳にしますが、「6」を意味します。
Finderscreensnapz003

これまでにもROBOBASIC講座の中で何の説明もなく16進数の表記をよく使ってしまってましたが、ROBOBASICに限らず、プログラムでは16進数はよく使いますし、便利なので、慣れておくといいと思います。あと、この16進数の接頭記号ですが、ROBOBASICでは"&h"と書きますが、C言語とかでは"0x"になります。このROBOBASICの講座内、統一した表記をしていませんので、あしからず。。

《進数と桁数》

Pagesscreensnapz00110進数以外で表す場合、「何で、わざわざ10進数以外を使うのか?」なんですが、ひとつには桁を揃えて解りやすくする為だと思います。Pagesscreensnapz003例えば、8ビット とか、16ビットとか言いますが、2進数で表せば、8桁、16桁になります。8進数も16進数も2の乗数なので同じ感じです。コンピュータはバイト(8 ビット)単位で物事を扱います。バイト単位で数値を扱う時、16進数が便利になります。

16=2の4乗です。
2進数だと4桁、16進数だと1桁で左の表の様に表すことができます。なので、1バイト=8ビット(4乗+4乗)は、16進数2桁で表すことができるということですねflair

ちなみに当たり前と言えば当たり前なんですが、16進数の2桁を2進数に書き換える時、例えば、&hA3は、Aは1010で、3は0011なので、繋げればOKで、&b10100011です。その逆の2進数を16進数に書き換えるときも同じ要領でできますので、&h0から&hFまでの2進数を覚えておけば、2進数<->16進数の変換はバッチグ〜〜good

《数の範囲》
ROBOBASICで変数を扱う場合、その変数がどんな変数なのかを定義しなくてはいけない仕組みになっています。ROBOBASICでは、BYTE型と、INTEGER型の、2種類の変数を利用することができます。
Pagesscreensnapz009

他のプログラム言語では、これ以外にもいろいろな型が使えるもありますが、兎に角、この2つだけで、負の数を扱える型はありません。それぞれ表にあるように、BYTE型の方は、0から255までの数値、つまり1バイトの数値、INTEGER型の方は、0から65535までの数値、つまり2バイトの数値を利用できます。

《計算結果が型の範囲外になると》
型に慣れてない方は、以下のようなことが起こることを頭の片隅にでもおいといて下さい。変数だと、その変数がどんな数値になっているかプログラミングの中では解りにくいですからね。

BYTE型
 例:255+1=0
   255+2=1
   0-1=255
   0-2=254

INTEGER型
 例:65535+1=0
   65535+2=1
   0-1=65535
   0-2=65534

《文字列の型はないけど》
ROBOBASICには、文字列用の型はないのですが、

DIM A AS BYTE
DIM B AS INTEGER

A="5"
B="B"

のような使い方ができます。BYTE型でも、INTEGER型でも1バイトしか無理みたいです。つまり、

A="AB"
B="CD"

とした場合、

A=65
B=67

になります(ASCII表参照 )。
とりあえず、数値と文字は違いますので

A="5"
B=5

は、B=5ですが、A=53です(ASCII表参照)。

《コマンドと変数/定数/数値》
ROBOBASICのコマンドの引数として、何が使えるのか、というか、roboBASICでコンパイルした時、エラーが出るか出ないかを調べてみましたので、プログラミングの際の参考にして下さい。ちなみに、変数可のものは、定数も、数値も可、定数可なものは、数値も可です。INT可は、INTEGER型とBYTE型のどちらの変数でも使用でいます。INT不可なものは、BYTE型の変数のみ使用できます。RZ1Basicでは、コンパイル時これらのチェックをしていませんので、その内、これらのチェックにも対応させなくてはいけないですね。

(a,b,c 順)
Pagesscreensnapz005

| | コメント (3) | トラックバック (0)

RZ1Basic v0.2.5 公開

Rz1bicon04

RZ1Basic v0.2.5を公開しました。

先日、あれこれほざいていましたが、遅い原因を特定して、だいぶ最適化できたので、殆どストレスなして編集できるようになったと思います。ただ私自身がそんなに悪いコンピュータ環境でないので、遅いマシンを使っているとやっぱり付加が大きいくあまり改善されていなかもしれません。

更新内容

  1. コードエディタ編集速度に関して、大きなファイルで処理速度がかなり低下してしまう問題点を大幅に解消、ほぼストレスなしで編集可能になった
  2. その他、エディタに関する不具合修正
  3. 有線によるGame Padコントロール機能追加(下記)
  4. その他、細々したこと

最新版のダウンロードは、いつものところです

Game Padコントロール機能について
インプットデバイスを使って有線でロボザックを操作する為の機能です。USBのゲームパッドや、PSを持っているならUSB to PS/PS2を使ってPSコントローラをパソコンへ繋げたり、兎に角、インプットデバイスならマウスだって、キーボードだって利用できます。


【設定編】
oneゲームパッドを繋いで、RZ1Basicを起動し、ゲームパッドのアイコンをクリック
Rz1basicdebugscreensnapz019
下の図のダイアログが表示されます。
twoまず設定を編集しなくてはいけません。「編集」ボタンをクリックして下さい。
Rz1basicdebugscreensnapz020
「Game Pad Editor」というタイトルのウインドウが開きます。
three次に設定したいデバイスを入力装置のポップアップメニューから選択します。Rz1basicdebugscreensnapz021
その装置のボタンなどの一覧が表示されます。
four試しにゲームパッドのボタンをいろいろ押してみましょう!一覧の「値」の所の数値が変わりましたでしょうかsign02お好みによってボタンの名称は、ボタン名(要素名)をクリックして、編集できます。
five目的のボタンに意味付けをします。左のリストからそのボタンを選択し、「+」ボタンをクリックして下さい。その際に、ゲームパッドの方のボタンを押した状態でクリックすると少し操作の手間が省けるかもしれません。
Rz1basicdebugscreensnapz022
右側のリストにそのボタンが登録されます。
six右側のリストをクリックすると通信の際のデータを編集できます。

  1. 値 :ボタンを押したときの値です。アナログの場合は、右のチェックボックスにチェックを入れて範囲を設定できます。
  2. 変数:変数とは、ボタンを押された時、ロボザックのプログラムの何番目の変数にデータを送るのかを設定します。
  3. 番号:2で設定した変数にいくつを入れるかを設定します。

設定が済んだら、「セット」ボタンをクリックするのを忘れないで下さい。
Rz1basicdebugscreensnapz023

sevenPSのコントローラで設定してみた「例」です。
Rz1basicdebugscreensnapz025
eight保存名(上の図の例:PS Ctl test01)を入れて、ファイルメニューの「保存」で保存してウインドウを閉じます。
Rz1basicdebugscreensnapz026
nine再編集したい場合は、再度このウインドウを開いて、デバイスを選択後、右上のポップアップメニューから保存した名称を選択してから編集し、再度保存して下さい。また、別ファイルとして保存したい場合は、名前を変えて(上の図の例:PS Ctl test01をPS Ctl test02とかする)、保存すればOKです。

【プログラム編】
例えば「RoboNova-1 GamePad Template Plogram」などで利用する場合にどんなコードを書けばいいかを、ちょ〜〜簡略化して書いてみました。

oneゲームパッドからのデータを第一変数(この場合RR)で送ることにしました。

twoボタンが押されていなければRRは0です。ボタンが押されるとRRに値がセットされますので、それをPSDTにセットして、RRを0に戻しておきます。

※ボタンを同時に何個か押すと、それらのボタンで設定した番号の合計値が送られます。

DIM RR AS BYTE
DIM PSDT AS BYTE
RR
=0
MAIN:
PSDT
=0
IF RR<>0 THEN
    PSDT
=RR
    RR
=0
ENDIF
ON PSDT GOTO MAIN,key1,key2,key3,key4,key5,......
GOTO MAIN

【操作編】
oneロボザックをプログラムを送るときと同じようにケーブルで接続
プログラムを転送し、ゲームパッドのボタンをクリック
Rz1basicdebugscreensnapz019_2
two入力装置と、設定を選択し、「開始」をクリックします。
ロボザックの操作ができる状態になります。
Rz1basicdebugscreensnapz027

threeこの機能が起動中は、「ゲームパッド」のボタンが少し黒くなっています。
「停止」する場合は、もう一度、この「ゲームパッド」のボタンをクリックして下さい。
Rz1basicdebugscreensnapz017

 

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

ロボット関連ダウンロード情報!!

ドイツのハイテックいろいろあったのでダウンロードしてみたhappy01
(上記リンク先と、その中の    Downloadsの中のSoftwaresの中あたりで得られた)

oneBluetoothの純正品があるみたい。

いいなぁ。。
日本でも売らないのかなぁ。。。??
純正品に弱い私ですsweat01

1, Robonova Bluetooth Module
Screensnapz001

これはどれくらいの大きさなのだろう??マニュアル(Bluetooth Module Manual)にはサイズが書いてないbearing頭にアンテナが入って、バッテリの上にこのモジュールが入るのかなぁ??相変わらずここの会社のマニュアルは解りにくい。

Downloads>Softwaresに「Robonova Bluetooth Module Configuration Software」というのがあってダウンロードすると、Promi-ESD_Setup(En).exeがダウンロードできる。

2, Robonova Bluetooth Controller

Screensnapz002


コントローラーもあるみたい(Bluetooth controller manualの中の写真)。。Bluetooth対応のPSコントローラーでもいいけど、これは折りたたんでコンパクトになるのだろうかsign02ユニークな形だheart04

3, Bluetooth Controller example template

テンプレートもある。IR Remoconのコントローラをmodifyしたもののようだ。

twoMAVINのソフトまであった

MAVINは持っていないけど、フローチャート式でプログラムするタイプなので、参考にしたいと、ソフトウエアだけでも欲しいと思っていた。Parallelsで動かしてみた(図)。やった、動くhappy01まぢ嬉しいscissors

これを参考にMVIN用ソフトのMac版作るのは可能だろうか。。

2

 

threeUSB 2.0 TO RS232 Converter
別になんてことないんだけど、PC/MAC/Linux用が入っていた。Linuxのことは良く分からないけど、この前、ParallelsでLinux使える様にしたから、繋げて試してみよう〜っとnotes

fourHMI_Servo_Programer

何かは日本のハイテックさんのページを見て下さい。

ロボザックのサーボに対応してるのかなぁ???これもParallelsで動かしてみた(図)
セッティングにケーブルが必要だよね。どんなケーブルを作ればいいんだろうかsign02
ハイテックさんで、3800円で売ってるけど、ケーブルは3800円より全然安く作れるよねsign02

Hmiseervoprogramer

以上!ロボット関連ダウンロード情報〜でしたpaper

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

独り言

●今週末は土日とも仕事、今月は土日仕事が2回あってお疲れモードwobbly明日からの1週間持つのでしょうかsweat01

●ブログも書きかけばかりだし、ソフトも作りかけだし、ここんとこブログ書いてないし。。。


Rz1basicdebugscreensnapz015 ●パソではゲームをやらないのでGame Padは持ってないなぁとなにげに思っていたのですが、ふと、Connectix Game Stationが出た時(10年ほど前かな?)に、Gravis Game Padを買ったことを思い出し、がらくた箱の中から探し出し、繋げてみました。

というか、USBのPSコントローラーとか、USB to PS/PS2というのが、今は1000円程度で売っているんですねcoldsweats01

ま、兎に角、これを使ってロボザックを動かせるようにと、試しに、Imput Deviceのプログラミングをしてみた。ん〜Mac版もWin版もImput Device対応なものができそうだ!ということで、先日、有線でGame Padでコントロールできる機能を付けました(図)。まだ公開はしてません。

というのは、パッドの設定と、実際にデータを取ってくる処理までは出来上がってはいるんだけど、いざパッドのボタンをあれこれ押してみると、得られたデータをどう判断して、どう処理していいのかが難しいんですね〜〜〜sweat01もう少し検討が必要なんですわsweat01sweat01

●RZ1Basicのコードエディタが遅いよね。。。

コードが長いとまぢ使い物にならないdespair

Game Pad対応のため、
夢現工房さんのページから、
RoboNova-1のGamePad用Template Plogram
「Template Plogram For GameCon(Version1.09 20070515).bas」

をダウンロードしてみた。

うわぁ〜、5000行近くある...

遅いのは、何の処理に一番時間が掛かっているんだろう。。。

コードを編集すると動く処理

  • シンタックスの色付け
  • ラベルのリストアップ
  • Undoの為のバックアップ

を調べてみた。

シンタックスの色付けはほとんど影響ないみたいだ。ラベルのリストアップ、やっぱコードが長いと遅くはなるが、改良して、コードが長くてもだいぶストレスなしでリストアップできるようになった。

兎に角、時間が掛かっていたのはアンドゥの為のバックアップだったsign03

文字だけのバックアップならストレスにはならない...
時間が掛かっているのは色付けされたデータのバックアップだwobbly

シンタックスの色付けも一緒にバックアップ取らなくてはいけない理由があるのだ。
Windows版のエディットフィールドの色付けにバグがありそれを回避するためなんです。

そのバグは、カーソルのある行の文字列には色は付けられるのだか、もしそうでない行に色を付けようとすると、その行へスクロールしてしまうのだangry何行もの色付けをしようものなら、画面がちらついて見てられなくなってしまうのだ。

これはキーボードから、文字を入力したり、削除したりしている段階では、カーソルのある部分での処理なので、問題にはならないのだが、そうでない処理、ファイルを開いたり、ペーストしたり、アンドゥした際、その内容に色を付けることができないことを意味している。。。

RZ1Basicで、ファイルを開いた時、最初にカラーリングしているのは、この色付けの不具合を回避するため、バックグランドで色を付けてから開いているのである。アンドゥのバックアップの為に、文字だけでなく、色のデータもバックアップするのは、この不具合を回避するため、必要な処理なのである。。。

もっといい処理方法はないのだろうか!?考え中。。。

長いファイルを開くのにも時間がかかるし、処理も時間がかかるし、デバグに時間がかかる。。。

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

ROBOBASIC講座(ACTION)

【ACTION (アクション)】
 第一変数をn+50にして、0x2728をサブルーチンコールする
    注)この命令語は MRC3024とロボノバロボット専用の命令語
 構文: ACTION [番号]
 例:  ACTION 10

なんか使いそうにないコマンドばかり説明してて申し訳ありません。
先日「ROBOBASIC講座(第一変数の利用法)」の説明をした時に、利用法が分からないと書いていたことに関して、avalonさんに、「action命令のパラメータ」で使うとコメント頂きまして、そう言われても、全然意味が分からなかったので、ACTIONについて勉強してみました。

マニュアルに「ナンバーに従がって決められたテンプレート基本動作を行う」と書いてあったんですが、これを見ても全然理解できませんでした。実は、RZ1Basicが、まだこのコマンドサポートしてないことに気が付き(関数だけ作ってあって、中身は空っぽでしたsweat01)、対応させようとROBONOVA情報局Wikiを見てたら、「n+50の値を第一変数に代入し、メインルーチンをサブルーチンコールしている」とありました。これでやっと理解できました。でも、ここで書いているメインルーチンとはどこを示すのかがわからなかったので、オブジェクトがどう生成されているかを調べました。すると、

    0xD0 15 40 12 ?? 00 C5 28 27

となっていました。0xD0 1540 12?? 00は、第一変数をn+50にするという意味です。で、その後につづく、0xC5 2827は、0xC5がGOSUBを意味し、28 27はアドレスなので、GOSUB 0x2728ということになります。従って、上に書いたように「第一変数をn+50にして、0x2728をサブルーチンコールする」というのがACTION nがやっていることになります。

ところで、0x2728というアドレスですが、先日GOTO AUTOについて書きましたが、このアドレスは、そこでも出てきましたね。くどいですが、いちおう、それぞれのコマンドを並べて書いておきます。

  • GOTO AUTO は第一変数を0にして、0x2728へGOTOされる
  • ACTION n は第一変数をn+50にして、0x2728へGOSUBされる

ということで、テンプレートの利用法が分からないと書いた部分の復習をしておきます。

テンプレートは、
DIM RR AS BYTE
GOTO AUTO
FILL .....
IF RR>50 AND RR<83 THEN GOTO action_proc

となってます。これを見て、どうやったら、RRが50より大きく83より小さくさせることができるのかが理解できませんでした。

IF RR>50 AND RR<83 THEN GOTO action_proc
のコードは、FILLのコマンドで、ちょうど0x2728行から書かれるようになってします。
そして、この行を呼ぶ命令がACTIONという訳なんですね。

 以上のことをふまえて、「ROBOBASIC講座(テンプレートMAINループ)」で、変なところがないか考えてみて下さい。。

なお、Actionコマンドは、RZ1Basic v0.2.4以降で対応しています。。

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

ROBOBASIC講座('$LIMIT)

【'$LIMIT (リミット)】
 サーボモーターの動作範囲を制限する
 構 文:'$LIMIT [モーター番号], [最小値], [最大値]
 初期値:最小値=10、最大値=190
 例:  '$LIMIT  2, 50, 100

例の場合、モーター2番は、50度から100度まで可動できる意味になります。

この命令は1回の宣言でプログラム全体が対象になります。
従って、

MOVE G6A,10,20,30,40,50,0
'$LIMIT  1, 40, 170

となっていても、モータ1番の値が50度以下の30度になっているので、コンパイルエラーを返します。私はまだロボザックを完成させてないので、角度を制限した方がいいモータがあるのかわかりませんが、もしそんなモータがあるならば、有用な命令ですね。ちなみに、RZ1Basicではver 0.2.4以降で対応です。

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

RZ1Basic v0.2.4 公開

Rz1bicon04

RZ1Basic v0.2.4を公開しました。

今回は、全体的に細々した更新内容が多いです。コンパイル関連でもメジャーなコマンドではないのですが、その辺りを対応/修正していますので、できるだけ新しいバージョンを使って頂けますようお願い致します。

更新内容

  1. 文字列内に予約語がある場合の不具合を修正
  2. Actionコマンドに対応
  3. '$LIMITコマンドに対応
  4. REMARKコマンドに対応
  5. Resultフィールドをダブルクリックした場合、「戻る/進む」のリストに追加されるようにした。
    Parallels_desktopscreensnapz048
  6. IR Remoconウインドウで、第一変数以外の変数へもデータを送ることがきるようにした。
    Parallels_desktopscreensnapz047
  7. コントローラのウインドウにRemocon表示のボタンを設けた。
  8. 同意画面を同意の上、次回からは表示させなくする機能を追加した。

といったところでしょうか。
なお、RZ1Basicはここからダウンロードできます。

| | コメント (5) | トラックバック (0)

RZ1Basic v0.2.3日本語Win版

Rz1bicon04


RZ1Basic v0.2.3を17日に公開したのですが、日本語版のWindows版だけ、インストーラを作り間違えてしまったようで、インストールされるのがv0.2.2のものを作ってしまったようです。何のお問い合わせもないので、誰もダウンロードしていないんだと思いますが、18日11時頃に、日本語版のWindows版のインストーラを作り直してたものをアップロードしました。

私のところは、古いファイルがキャッシュに入ってしまっているせいか、現在まだ新しくアップロードしたファイルをダウンロードできなのですが、今回アップロードしたものは、インストーラのトップ画面のトップに、「RZ1Basic v0.2.3 日本語インストーラ」と表示するようにしましたので、それでご確認下さい。

| | コメント (4) | トラックバック (0)

ROBOBASIC講座(PEEK、POKE その2)

前回の「ROBOBASIC講座(PEEK、POKE その1)」つづきです。

【答えと解説】

one:サンプル2 答え「0x0D04」

《サンプル2》
TEMPO 230
MUSIC "C"
GOSUB test
MUSIC "E"
END

test:
MUSIC "D"
END

このソースの場合、3行目のGOSUBルーチンでtestへジャンプしたまま、プログラムを終了させたものです。これのプログラムでは、サブルーチン内でスタックポインタがひとつ(2バイト)増えていることを確認することができます。スタックポインタは、「ROBOBASIC講座(PEEK、POKE その1)」のBの図の状態の「0x0D04」になっていることが分りましたでしょうか。

 

two:サンプル3 答え「0x0D00」

《サンプル3》
TEMPO 230
MUSIC "C"
GOTO test
MUSIC "E"
END

test:
MUSIC "D"
RETURN
END

このソースの場合、3行目のGOTOでtestへジャンプさせています。ジャンプ先のtestにはRETURNがあります。このプログラムは、GOTOでジャンプした場合に、RETURNが現れた時、スタックポインタがどうなるかを見たものになりますね。GOTOで呼ばれたのにも関わらず、スタックポインタはRETURNが呼ばれたことによって、スタックポインタはひとつ(2バイト)減って「0x0D00」になります。いろいろ変なコードを書いて試してみましたが、兎に角、スタックポインタが0x0D02より小さくなると、変なことが起こるようです。

では、スタックポインタが大きい方へはいくつまでいけるのでしょうかsign02
以下のようなコードを書いてみました。

《サンプル4》

DIM RR AS BYTE
DIM a AS BYTE
DIM sp AS INTEGER

TEMPO 230

MAIN:
sp=PEEK(&h04D5)
IF sp<&h0D02 OR sp>&h0E00 THEN
    MUSIC "G"
    END
ENDIF
MUSIC "C"
GOSUB REMGET
GOTO MAIN
END

main_exit:
MUSIC "F"
GOTO MAIN
END

REMGET:
MUSIC "D"
if RR=0 then GOTO MAIN1
GOTO main_exit
END

MAIN1:
MUSIC
"E"
a
=REMOCON(1)
ON
a GOTO MAIN
GOTO main_exit
END

これは、「基本モーション1」を簡略化したものです(参考)。「基本モーション1」で、RR=0でA=0の場合、つまり、な〜んもしてない時、MAIN->REMGET->MAIN1->MAINとグルグル回っている仕組みになっています。でもMAINの中がGOSUBで呼び出しているのに、RETURNなしでMAINに返ってきてしまうため、スタックポインタが、どんどん増えて行くはずですよね。

MAINに戻った時、スタックポインタが0x0D02であるのが本来だと思いますので、PEEKコマンドを使って、スタックポインタの値を調べて、0x0D02以外だったら、プログラムを止めるというプログラムを書込んでおけば、どこかでプログラムミスをしてた時、安心ですね。

sp=PEEK(&h04D5)
IF sp<>&h0D02 THEN
    MUSIC "G"
    END
ENDIF

で、サンプル4では、0x0D02以下の場合、変なことが起こることはサンプル3でわかったので、大きい方が、どこまで大きくなったら変なことが起こるのかを調べることが目的なので以下のようにしてみました。

IF sp<&h0D02 OR sp>&h0E00 THEN

だんだん数値を大きくして行きましたが、0x0E00でも、いちおう変にはなりませんでした。
ROBOBASIC講座(GOSUB...RETURN)に、GOSUBで呼べるのは5回までマニュアルに5回と書いてある)と書きましたが、そうでも無いみたいですねsweat01ここではコードは書きませんが、5回を超えるとRETURNで戻れないかと、GOSUBルーディンを階層にしたものを作って試してみましたが、10個までしか試していませんが、RETURNでちゃんと戻ってきているようでした。そこでメモリの上限までスタックは使えるのかテストしてみました。

ROBONOVA情報局WikiにSRAMのサイズは4KBで、アドレス領域が、0x0100 ー 0x10FFと書いてあるので、

IF sp<&h0D02 OR sp>=&h10FE THEN

として試してみました。
で、結果、変にはなりませんでした。音が鳴り止むまで長かった〜sweat01
ならばsign01sign01sign01

IF
sp<&h0D02 OR sp>&h1110 THEN
    MUSIC "G"
 END
ENDIF

IF sp=&h0D04 THEN
    MUSIC "A"
    POKE &h04D5,&hFE
    POKE &h04D6,&h10
ENDIF

とサンプル4の一部分を書き換えて、上限を超えたらどうなるのかも試してみました。0x10FEまでは変にならなかったので、スタックポインタの値をPOKEを使ってメモリの上限にセットする式を加えました。結果、0x1110までやっても変にはなりませんでした。私にはもう分りませんsweat01

殆ど、GOSUB...RETURNの話になってしまいましたが、メモリ内の様子を見たい時、どうしても変更させたい時にPEEK, POKEが使えます。ただし、PEEKはいいんですが、POKEは書換えなので、間違って書き換えたりしたら、とんでもないことが起こりえますので、十分注意して有効利用して下さい。

参考資料

  1. ROBOBASIC講座(GOSUB...RETURN)
  2. ROBOBASIC講座(PEEK、POKE その1)
  3. ROBOBASIC講座(テンプレートMAINループ)
  4. ROBONOVA情報局Wiki
  5. Robotics Files

| | コメント (4) | トラックバック (0)

RZ1Basic v0.2.3 公開

Rz1bicon04

RZ1Basic v0.2.3を公開しました。

バージョンアップの頻度が高いですが、今回も結構いろいろ機能を付けました。私的には、やっとビット演算の式に対応させられたので嬉しいです。これでコマンドに関してはほぼ網羅したと思いますscissors 更新内容は1つの修正と、6種類の新機能です。新しい機能が沢山ありますので、以下の更新内容の説明をお読みの上、ダウンロードして、お使い下さい。 最新版のダウンロードは、いつものところです

更新内容

  1. [修正] Windows版で、シミュレーション画像上でマウスのホイールをまわすと、ソースエディタもスクロールしてしまう不具合を修正。
  2. [新機能] ビット演算式に対応
    A=B.3のような、ビット計算のコンパイルに対応しました。
  3. [新機能] GOTO AUTO, FILL, 文字列にシンタックスカラーを付けた。
  4. [新機能] GOTO, GOSUBのある行をOption(またはALT)キーを押したままダブルクリックで、GOTO, GOSUBのジャンプ先へ移動できます。

    Parallels_desktopscreensnapz042
     
  5. [新機能] 「戻る/進む」ボタン:上記の操作やラベルリストをクリックして、ジャンプ先を表示させると、このボタンが使えるようになります。
  6. Parallels_desktopscreensnapz041

  7. [新機能] ソースエディタおよびオブジェクト表示のフォントおよびフォントサイズを設定(変更)および、ソースエディタのシンタックスの色を設定(変更)できるようになった。(ダプルクリックで色の変更ができます。)

    Rz1basicscreensnapz013
    Macintosh版は、メニューRZ1Basicの環境設定を選択して下さい。

    Parallels_desktopscreensnapz046
    Windows版は、ファイルメニューの環境設定を選択して下さい。

    Parallels_desktopscreensnapz045_4

    シンタックスなどの色は、変更したい項目をダブルクリックすると変更できます。


  8. [新機能] 赤外線リモコンのインターフェイスを付けました。第一変数を用いた起動テストができるようになります。
    Parallels_desktopscreensnapz044
    コントローラの「IR Remocon」を選択
    IR Remoconの画像が表示されます。図のリモコンのボタンをクリックすることで、先日書いた第一変数によりコントロールができます。
    Parallels_desktopscreensnapz043

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

RZ1Basic v0.2.2 公開

Rz1bicon04

RZ1Basic v0.2.2を公開しました。
※更新の頻度が高くて申し訳ありませんsweat01

今回も結構いろいろ手を加えました。もう少し手を加えたい部分があったのですが、PRINT文かPRINT FORMATに不具合があると報告を頂きまして、早々に修正してアップロードすることになりました。

更新内容

  • PRINT文関連の不具合を修正
    • [修正]:PRINT文のクォーテーション内に演算記号(+, =, &, %など)がある場合に、それらの前後にスペースが入ってしまう不具合を修正
    • [修正]:PRINT FORMAT文が、すべてPRINT文のルーチンの方へ分岐していた不具合を修正
    • [修正]:デコンパイルにおいて、PRINT文のルーチンを作り忘れていたため作成
  • 3次元シミュレーション画像
    • [修正]:カーソルがある行にMOVEコデータがあった場合、そのポーズになるが、その追従性が非常に悪かった不具合を修正。MOVE G6A〜Dの様な場合は、複数行選択して下さい(図1)。
    • [変更]:カメラ位置をマウスのホイールで動かす仕様にした。Mighty Mouseだと上下左右ぐるぐるできます(WindowsでMighty Mouseを使える様にするドライバもあるよ。知り合いの会社なので宣伝に貢献paper)。縦方向しか動かないホイールの場合は、Option (またはALT) キーを押した状態でホイールを動かして下さい。
    • [新機能]:DIRの設定を選択できるようにした。
  • コードエディタ
    • [新機能]:MOVEデータの各値にマウスのポインタを合わせるとモーターの番号を表示するようにした。いちいち何番目か数える手間が省けるので便利だと思います(図2)。
    • [新機能]:MOVEデータなど、数値をダブルクリックすると、その数値が選択されますね。その状態で、Option (またはALT)キーを押したままマウスのホイールを回すと、その数値が変わります。もしMOVEデータの上でこれを行えば、シミュレーション画像も変更された数値に伴ってポーズを変えますので、ポーズ作成に便利だと思います(図3)。
  • インストーラー(Macintosh版)
    • [新機能]:Macintosh版は、インストーラを作ってなかったので作りました。

以上くらいかな。あと、とりあえず、既知の不具合もありましてsweat01最近付けた機能に関連しても

  • Macintosh版:オブジェクトコード表示にしても、シミュレーション画像が消えてくれないsweat01
  • Windows版:シミュレーション画像上で、ホイールを動かしているのに、コードエディタがスクロールしてしまうsweat01

などがあります。コンパイラの方が原因となっている内容のようで、どうにか回避策はないかと考えています。

Fig.1:選択された行が、シミュレーション画像に反映します。

Rz1basicscreensnapz001


Fig. 2:MOVEデータの上にポインタを持ってくると、モータ番号が表示されます。
Rz1basicscreensnapz003

Fig.3:数値が選択されている状態で、Option(またはALT)キーを押しながらマウスのホイールを回すことで、数値を変えられます。

Rz1basicscreensnapz004

 

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

RZ1Basic v0.2.1 公開

Rz1bicon04

RZ1Basic v0.2.1を公開しました。

※すいません、14日AM2時頃書いたのですが、Windows版の方アップロードするの忘れてましたsweat01いまアップロードしました。

結構いろいろ手を加えましたし、重大な不具合を修正していますので、必ず、こちらのバージョンを使って頂けるようよろしくお願い致します。


更新内容

  • 数値が255の時の不具合を修正( 重大
  • ソースエディタで、ラベルに関して、リストボックスに一覧表示することにした。
    サブルーチンクリックで表示できるので、より快適になりました。
  • ロボザックの3Dモデルを表示するようにした。
    MOVEコマンドのある行を選択すると、そのポーズになります。

ダウンロードはこちらからできます

Parallels_desktopscreensnapz040_3

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

ROBOBASIC講座(PEEK、POKE その1)

【PEEK(ピーク)】
 コントローラー内部のSRAMのデーターを読み込む。
 書 式:PEEK 読込むアドレス
   例:DIM A AS INTEGER
     A=PEEK(&h0140)
 備 考:マニュアルには、0-255までの...と書いてあるが、
     戻り値はINTEGERで受け取れるみたい。

【POKE(ポーク)】
 コントローラー内部のSRAMにデーターを書込むする。
 書 式:POKE 書込むアドレス,書込む値
   例:POKE &h0D02,0
     POKE &h0D03,16
 備 考:マニュアルには、書込む値はBYTEで
     INTEGERは使えない。

今回は、PEEKとPOKEがテーマなんですが、その話に行き着く前に、これまでのGOSUB...RETURN関連の話の流れとして、スタック、スタックポインタがどんな挙動を示すのか。それを理解flairした上で、PEEKやPOKEを利用してみたいと思います。

と、その前に「ROBOBASIC講座(GOSUB...RETURN)」をまだ見てない方は、いちおうそちらを見てからここを読んで下さいねpaper それから、オブジェクトコードなど、ちょsign04っと難し目の話が出てきますが、諦めないで頑張って最後までみて下さいねheart04

さて、まずdownwardleft以下のサンプル1をroboBASICかRZ1Basicでロボットに転送して、実行させてみましょう!

《サンプル1》
TEMPO 230
MUSIC "C"
GOSUB test
MUSIC "E"
END

test:
MUSIC "D"
RETURN

earpaper
は〜いhappy01いつも聞き慣れたnoteでしたね。
それでは早速、このソースのオブジェクトコードを見てみましょうrun

  1. roboBASICを使われている方は、サンプル1を保存し、RZ1Basicでそのファイルを開いて下さい。
  2. 開いたら、右上に「ソースコード」と表示されているポップアップメニューを、「オブジェクトコード」に変更して下さい。

すると以下のようなものが表示されると思いますdownwardleft
※Hexエディタでオブジェクトコードを見るとこの前に余分?な部分も付いてますので、アドレスの値がズレルので読み難くなるかもしれません。

《サンプル1のオブジェクトコード》
[0000] 556E7469 746C6564 08020C0A 210D2F00   Untitled....!./.
[0016] BF12E6BA 19001824 00C52500 BA220018   .......$..%.."..
[0032] 2800C422 00BA2B00 182600C6 C42C00     (.."..+..&...,..

  • 左 :バイト数(10進数)
  • 中央:実際に転送されるコード(16進数)
  • 右 :そのコードをASCIIで表したもの

1行目の最初の16バイトはプログラムの情報なので、その次の行から、オブジェクトコードとソースコードと対応させると以下のようになります。

Finderscreensnapz002_3

※1の「GOSUB test」は、0xC5 0x25 0x00となっています。0xC5というのは、GOSUBを意味しています。0x25 0x00は、ジャンプ先きのアドレスを示しています。このアドレスの値はリトルエンディアンで記述されているので、ひっくり返して、0x0025がジャンプ先きになります。

次に、※2の「RETURN」のコードを見てみると、RETURNは、RETURNを意味する0xC6のみしか書かれていないことがわかります。「ROBOBASIC講座(GOSUB...RETURN)」でも書きましたが、RETURNの行き先は、実行時にスタックに記録されます。以下をご覧下さいdownwardleft

実行時のスタックポインタおよびスタックの様子
GOSUB が実行されると(図A→B)
1、スタックポインタ(0x04D5,04D6)の値が示すアドレス(0x0D02)に、 RETURNで戻ってくる場所(GOSUBの次の行)の、0x001Cを記録する。
2、 スタックポインタの値(0x0D02)を、2バイト足した値にする(0x0D04)。
3、0x0025へジャンプする。

RETURN が実行されると(図B→A)
1、 スタックポインタの値(0x0D04)を、2バイト引いた値にする(0x0D02)。
2、 スタックポインタの値が示すアドレス(0x0D02)の値(0x001C)へジャンプする。


Stackmem

では、サンプル1を実行後、スタックポインタの値と、スタックの値を見てみることにしましょう。サンプル1は変な所はないので、正常に終了しているはずです。なので、スタックポインタの値は0x0D02(初期値)であり、スタック(0x0D02)は、0x001Cであればいいはずですよね。

調べてみましょうsearch

oneスタックポインタの値

  1. roboBASICで転送しててもOKです。兎に角、転送すれば実行されているはずなので、RZ1Basicを起動して、コントローラーのコマンドテストを選択します。
  2. スタックポインタのアドレスは0x04D5です。10進数だと1237です。
    Rz1basicscreensnapz012

  3. 「MEMORY READ」で、「SRAM」を選択。
  4. Start Address1237と入力します。
  5. Read Length2バイトです。
    ※SRAMのアドレス1237から2バイト読込むという意味になります。
  6. Startボタンをクリックしてみて下さい。
    Parallels_desktopscreensnapz037

Resultの所に、020Dと表示されたかと思います。逆さまに並べないといけないので(図A、B参照)、0x0D02がスタックポインタが示す値ということになります。

twoスタックの値

  1. 0x0D02は、10進数にすると、3330です。
  2. Start Address3330と入力します。
  3. Startボタンをクリックしてみて下さい。

Resultの所に、1C00と表示されたでしょうかsign02この数値も逆さにして、0x001Cがスタックされた値ということになります。

スタックポインタ、スタックの値の読み方は理解頂けましたでしょうか?


まだまだ話はつづくのですが、なんだか長くなってしまいましたねsweat01お仕事に寝坊してしまうといけないのでdash次に書こうと思っていたことを宿題にすることしましたshine

以下のサンプル2と3のソースコードは、サンプル1を少し変なコードにしたものです。

  • サンプル2は、RETURNのところをENDにしました。
  • サンプル3は、GOSUBのところをGOTO testにし、RETURNの後にENDを付け加えました。

one:サンプル2はGOSUBで呼ばれたまま停止してしまいます。スタックポインタはいくつになっているでしょうか?
two:サンプル3は、GOTOで呼んだにも関わらず、サブルーチンにはRETURNがあります。スタックポインタにはいくつになっているでしょうか?

私はお風呂に入って、少し寝ま〜すsleepy
頑張ってねheart02

《サンプル2》
TEMPO 230
MUSIC "C"
GOSUB test
MUSIC "E"
END

test:
MUSIC "D"
END

《サンプル3》
TEMPO 230
MUSIC "C"
GOTO test
MUSIC "E"
END

test:
MUSIC "D"
RETURN
END

 

つづきの「PEEK, POKE その2」はこちらpaper

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

ROBOBASIC講座(テンプレートMAINループ)

さて、今回は、リモコン用テンプレートのMAINループをみてみましよう。
これは信じれないとか、あれは信じれるとか、これは動かないとか、あれは動くとか言っているだけでなく、自分の目で見て確認してみましょうsign01

と、その前に、ROBOBASIC講座(GOSUB...RETURN)をご覧になっていない方は、まずそちらを見ておいて下さい。見てみたテンプレートは、ROBOBASIC講座(GOTO AUTO、FILL)で紹介した。以下のテンプレートです。

 

それぞれのフローチャートを図にしました。図はクリックすると別ウインドウで大きく表示されますので、見難い場合はプリントするなりして下さい。

前回、ROBOBASIC講座(第一変数の利用法)で使い方が分らないと書いた、action_procのルーチンがらみにのことがらがありますが、それにしても、「?」が付けてある場所以外にも、どのプログラムにも変な場所があるように思います。

  • Overall Template Program、IR_Remocon_Template01の、action_procのルーチンはGOTOで呼んでいるのに、RETURNがある。
  • Overall Template ProgramのMAINルーチン内には、GOSUBで呼んでいる場所がないのでRETURNがある。
  • IR_Remocon_Template01と、基本モーション1の場合は、GOSUB REMGETがあるため、RETURNでMAINルーチンに戻る必要があると思いますが、GOTOだけで、MAINに戻ってきてしまう通り道がる。

どうしたらいいのかsign02は、各自でお好みに考えて頂ければいいと思いますが、別の機会に、私なりのMAINループを考えて、書いてみたいと思いますので、お楽しみにpaper

【Overall Template Program】

Overall_template_program

【IR Remocon Templet program01】

Ir_remocon_templet_program

【基本モーション1】

Photo

【追記】基本モーションの新しいバージョンが公開されました。新しいものに書き換えたフローチャートはこちらをご覧下さい。

| | コメント (3) | トラックバック (0)

ロボ DE 解剖学【10】組織と器官系(3)

久々に、「ロボ DE 解剖学」です。前回のつづきで、器官、器官系です。

《器官と器官系》
人体を構成している細胞には、4種類ありました。その4種類の細胞が集まってある機能をもつ器官を作り上げます。胃とか、心臓とかが、器官ですね。器官ひとつひとつは、それぞれある働きをもったものなんですが、ある一連の、もしくは、同種の機能をもった器官をひとくくりとして、器官系といいます。人体は、以下のような器官があり、以下のような器官系にまとめられています。

(例)
 消化器系
  食道・胃・小腸・大腸など
 呼吸器系
  鼻腔・気管・気管支・肺など
 循環器系
  心臓・血管(動脈・静脈)など
 感覚器系
  眼球・内耳など
 神経系
  大脳・脊髄・脳神経・脊髄神経など
 骨格系
  頭蓋骨・骨盤など
 筋系
  僧帽筋・大腰筋など
 関節・靭帯
  股関節・大腿骨頭靭帯など
 
さて、ロボザックについて、49号までのパーツ、および、センサー類を、まとめてみました。

【カバー関連品】
 ヘッドカバー(フロント・バック)・ゴーグル
 ボディーカバー(フロント・バック)
 ハンドカバー(トップ・ボトム)
 フットカバー(左右)

【ブラケット・フレーム関連品】
 ボディフレーム(フロント・トップ・バック・ボトム)
 ショルダーブラケット(フロント・バック)
 ハンドブラケット
 ブラケット(I型・U型・H型)

【バッテリー関連品】
 バッテリー
 クイックチャージャー

【アクチュエーター関連品】
 サーボモーター
 ボトムケース
 薄型・厚型スプラインホーン
 薄型・厚型ホイールホーン

【情報伝達関連品】
 マイコンボード
 シリアルケーブル
 リモコン
 パソコン

【センサー関連品】
 赤外線センサー(?)
 距離センサー(視覚?)
 光センサー(視覚?)
 加速度センサー(平衡斑:平衡感覚)
 ジャイロセンサー(半規管:平衡感覚)
 音声認識(聴覚)

【その他】
 ネジ・ボルト・ワッシャー
 ケーブルタイ・ケーブルクランプ
 ステッカー・シール・両面テープ

といった感じでした。そこで、かなり無理矢理なんですが、人体の器官系とロボザックの分類を対応させてみると、

【ブラケット・フレーム関連品】:ロボットを支える=骨格系
【バッテリー関連品】:ロボットのエネルギー源=消化器系
【アクチュエーター関連品】:ロボットの動力源=筋系
【情報伝達関連品】:ロボットをコントロールする=神経系
【センサー関連品】:外部からの情報をとらえる=感覚器系
【カバー関連品】:ロボットを覆う:皮膚?

という感じでしょうかねsign02sweat01
ごめんなさい、あまり面白くない内容でdashimpact
でも、「ロボ DE 解剖学」は、まだまだつづきますよsign03
次回から、骨格系に入りますgood
 

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

RZ1Disguise v0.1.1 公開

Rs2rz13_2RZ1Disguise v0.1.1 公開しました。
日付が変わってしまいましたが、今日はロボザックしまくってますcoldsweats01

今回の更新内容は、roboBASICへの変換の際、MOVE G6に変換できるようにしました。

Parallels_desktopscreensnapz033

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

ROBOBASIC講座(第一変数の利用法)

お受験が終わったら、ロボザック作ろうと楽しみにしていたけど、受験勉強中、息子には内緒でこっそりやっていたゼルダ(DS)とドラクエ(DS)をあげたのが失敗impactやつはロボットには見向きもせず、ゲームにハマってます。「明日こそ作ろう!」と約束を取り付けましたhappy01

ということで、今日はブログ書きますdash

今回は、コマンドの話ではありません。
第一変数、つまり、プログラムの中で一番最初に定義されている変数についてです。

前回紹介したリモコン用のテンプレートプログラムの場合

DIM RR AS BYTE
DIM A AS BYTE
DIM A16 AS BYTE
DIM A26 AS BYTE

となっていますから、RRが第一変数ということになります。

最初に出てくるのが、

'== Action command check (50 - 82)
IF RR > 50 AND RR < 83 THEN GOTO action_proc

ですが、これに関しては利用法わかりませ〜んsweat01ご存知の方、教えて下さいsign03
ここのRRの使い方はわからないのですが、MAINループの中で、

IF RR = 0 THEN GOTO MAIN1
ON RR GOTO MAIN,K1,K2,K3,K4,K5,K6,....

となっている部分についての使い方を紹介したいと思います。
この部分、RR=0なら、MAIN1のループへジャンプするので、リモコンの受信をキャッチして動くことがわかりますが、もしRRが0でなかったら、RRの値に従って動くということになりますよね。でも、RRの数値はどうやったら設定できるのでしょうかsign02

メモリーの操作は、通信で行うことができます。これは第一変数に限ったことではなくできるのですが、第一変数に限って、特別に通信コマンドがあるんです。ここのON RR GOTOはリモコンを使ってロボットを動かすのではなく、パソコンを使って通信でロボットを動かすためのものなのです。

現バージョンでは、特別なインターフェイスを作ってませんが、RZ1Basicでそれを確認してみましょうsign03

  1. ロボザックとケーブルで繋いで、マイコンのスイッチをオン。
  2. テンプレートが転送されてなければ、転送する。
  3. RZ1Basicを起動し、コントローラーのコマンドテストを選択。
    Rz1basicscreensnapz009_2

     
  4. Dataの下のエディットフィールドに「FF 数値(16進数)」と入力します。
    例:FF 10 (第一変数を16にする意味:RR=16)
    Rz1basicscreensnapz010
    16進数が分らない場合は、
    Rz1basicscreensnapz011
    で16進数を知ることができます。

  5. 「Send Data」のボタンをクリック

どうでしたかsign02動いたでしょうかsign02

Parallels_desktopscreensnapz032 と、実際にどんな処理が行われているか知る為に、RZ1Basicを使って説明しましたが、roboBASICと一緒に、roboRemoconというソフトウエアがインストールされたと思います。このソフトウエアがやっていることは、まさにこれに相当する訳ですね。

ということで、テンプレートのRRですが、そんな意味がありますので、変数の定義の順番を変えてしまうと変なことになってしまいますので、覚えておいて下さいねflairshine

| | コメント (7) | トラックバック (0)

通信ができないエラーの場合

ちょっとTipsを

タイムオーバー(エラーコード:-4)、転送エラー(エラーコード:-5)など、通信ができなくなってしまうエラーが出てしまうようになった場合の原因として

  • プログラム転送中にエラーになった
  • ハングアップしてしまうようなプログラムを転送した

ことも考えられます。
MR-C3024は、スイッチを入れると、転送されてあるプログラミングがスタートしてしまうので、プログラムが変になっていると致命傷になってしまう場合があります。

Parallels_desktopscreensnapz031_2 このような場合、少し荒てですが、スイッチオンと同時に、「プログラムの停止」ボタンを何度かクリックしてみて下さい。いっぱつでうまくいくとは限りませんので、何度か試してみて下さい。そうすることで、暴走する前に、プログラムが止まり、次からは転送できるようになるかもしれませんよ。

転送エラーは、プログラムの暴走だけが原因ではないと思いますので、とろあえず、ひとつの手段として、紹介しましたが、ここ で書いた、《テストコード》ですが、スイッチを入れて、すぐにプログラムを止めるコードを入れておいた方が安全ではないかということを考えて作ってみたコードです(まだリモコン/赤外線センサを繋いでないので試していませんけどsweat01)。いかがでしょうかねsign02

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

ROBOBASIC講座(GOTO AUTO、FILL)

【GOTO AUTO(ゴートゥーオート)】
 第一変数を0(ゼロ)にして、10024番地にジャンプする
 書式:GOTO AUTO

【FILL(フィル)】
 メモリーを、ある数値で埋める
 書式:FILL 埋める数値、埋める個数
  例:FILL 255,10000


リモコン用のテンプレートプログラムのMAINループについて、少し考えてみたいと思います。私もよくわからない部分がいくつかありますので、いろいろご教授頂ければと思います。また、ロボザックの冊子の方にもっとちゃんとした説明があったら申し訳ありません。

リモコン用のテンプレートプログラムには

  • IR_Remocon_Template01.bas
    RZ1モーションCD-ROM7 ※不具合あり?
  • 基本モーション1.bas 上記修正版?
    http://declu735.rsjp.net/rbz/news.htm
  • Overall Tempate Program_novoltage.bas
    http://www.hitecrcd.co.jp/support/down/software/index.htm

などがありますが、MAINループ部分は、ほぼ同じようなプログラミングになっていますね。

これらのプログラムの一番最初に今回タイトルにした、GOTO AUTOFILLが使われています。

'== auto_main ===============
GOTO AUTO
FILL 255,10000

GOTO hogehoge」は、マーカーhogehogeへジャンプする意味ですね。GOTO AUTOとありますが、プログラムの中のどこを探しても「AUTO:」と書かれたマーカーはありませんよね。このGOTO AUTOというのは予約語であって、10024番地にジャンプするという意味になっています。次に出てくるFILLは、255,10000となっていますので、この命令の場所から10000個(バイト)、255で埋められます。このことに関しては、「ROBONOVA情報局Wiki」の「Q&Aコーナー」に詳しく書かれてあります。

ロボットへ転送されるオブジェクトファイルは、

  • プログラム情報(16バイト)
    • 名 前 8バイト
    • 年月日 3バイト
    • 時分秒 3バイト
    • サイズ 2バイト
  • GOTO AUTO(8バイト)
    • 0xD015401000 5バイト
      第一変数に0にする。テンプレートファイルでは、RRが一番最初に定義されていますので、RR=0ということになります。
    • 0xC42827   3バイト
      GOTO 10024を意味している

ここまでのバイト数を合計すると、16+8=24バイトです。
次に、

  • FILL 255,10000
    • 0xFFFFFF...... と10000個埋められる
      24番地から10023番地まで0xFFで埋められます。

GOTO AUTOは、常に10024なので、GOTO AUTOを一番最初に書く場合は10000でいいんですが、GOTO AUTOの前に何かプログラミングを書く場合、FILLで埋める個数には注意が必要になってきます。

《テストコード》

'================================================
' templet program
'================================================

DIM RR As BYTE
DIM
A As BYTE

A = REMOCON(1)
IF A=16 then
    END
ENDIF

'== auto_main ===================================

GOTO AUTO

GOTO AUTOの前に何かプログラミングを書いた場合、FILLの埋める個数はいくつにすればいいだろうかsign02それを簡単に知る方法を紹介しておきますscissors

 

Parallels_desktopscreensnapz029_2

GOTO AUTOだけ書いて、オブジェクトコード作成ボタンをクリックします。図のように[合計27バイト]と出ます。なぜ24バイトでなく27バイトなのかというと、プログラムの最後に3バイトプログラムの最後を示すコードが入るからです。

Parallels_desktopscreensnapz030_2

ということで、上で書いた《テストコード1》の場合、同じようにやってみます。45バイトとなっているので、45-3=42バイトよって、10024-42=9982

 FILL 255,9982

とすればいい訳です。

pen上で書いた《テストコード1》の場合、変数Aを使っているので、DIM A AS BYTEを、元々の位置からずらしましたが、ROBOBASICの場合は、どこで変数を定義しようと関係ありませんし、ここで計算しているバイト数には影響しませんので、気にすることはありません。注意事項として、変数をどこで定義しても構わないのですが、第一変数だけは兎に角一番最初に定義しておくようにしましょう!(理由はここ

さて、もうひとつ、なぜ10024番地まで飛ばした所にテンプレートを書込んでいるんでしょうかsign02どこかにその答えが書いてあるのかもしれませんが、10024バイト以下のプログラミングならば、他のプログラムを送ってもテンプレート部分は消えることはありません。確定したプログラムは10024後に書込んでおいて、コーディングしている時、テストしている時の為に、10024までの領域を使って行うということなのでしょうかね??

簡単にテストしてみました。
テンプレートが送信済みの状態で、

新規に

MUSIC "C"

とだけ書いたプログラムを転送
つぎに、新規に、

GOTO AUTO

とだけ書いたプログラムを転送してみました。

結果、ちゃんとテンプレートは消えることなく実行できるようですよflair

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

RZ1Basic v0.2.0 公開

Rz1bicon04

RZ1Basic v0.2.0を公開しました。

更新の頻度が高くて申し訳ありません。
重大な不具合がまた見つかりました。旧バージョンをお使いの方は、必ず、こちらを使って頂けるようよろしくお願い致します。

更新内容
●ソースコードで、if文、for文の条件式、代入式で、128以上の数値を用いていた場合、正しくないオブジェクトコードを生成する不具合を修正

ダウンロードはこちらからできます

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

ROBOBASIC講座(GOSUB...RETURN)

【GOSUB(ゴーサブ)】
 サブルーチンを呼ぶ(ラベルの行にジャンプする)
 書 式: GOSUB ラベル

【RETURN(リターン)】
 サブルーチンから復帰する(呼び出したGOSUBの次の行へ戻る)
 書 式: RETURN

 例: GOSUB hogehoge
    ......................
    ......................
    GOTO MAIN

    hogehoge:
      ......................
      ......................
      RETURN

GOSUBGOTOは、よ〜く考えないと何かと問題を起こしやすいコマンドなんですが、使わずにBASICプログラミングするのは、それまた大変なので、どんなものなのか理解して、賢く使えるようにしましょう。

まず、GOSUBRETUENの仕組みは以下のような感じになります。

  • GOSUBは、スタックポインタが示すアドレスに自分の次の行のアドレスを記録し、スタックポインタの値をひとつ(2バイト)増やします。
  • RETUENは、スタックポインタの値をひとつ(2バイト)減らし、スタックポインタが示すアドレスに記録されているアドレスにジャンプします。

Gosub72

GOSUBRETUENで戻らなくてはいけません。その戻る場所をスタックという方式で記録しています。GOSUBがあると、戻る場所スタック領域に記録します。この時、最後に記録した場所を覚えておくのがスタックポインタになります。プログラムの中では、GOSUBが呼ばれて、次にRETUENが呼び出される前に、またGOSUBが呼ばれる場合も当然あります。GOSUBが呼ばれるたびに、戻る場所を次々と積み重ねるように記録していくということで、スタック(=積み重ねる)と呼んでいます。RETUENはその逆の処理になります。GOSUBでどんどん上に積み重ねていくのに対して、RETUENが呼ばれると、戻る場所を上から順に取っていきます(上図)。

  • スタックポインタ値 SRAM 0x04D6-0x04D5 初期値=0x0D02
  • スタック領域    SRAM 0x0D02から(MR-C3000系は5個、2000系は4個)

MR-C3024のスタックは場合、具体的には上記になります。細かいことはいいとして、積み重ねられるのは、5個までなので、GOSUBを呼び過ぎてスタックオーバーフローにならないようにプログラミングすることが大切ですね(上図)。また、さらに、GOTO文による危険も出てきます。RETUENが呼ばれることでスタックはひとつ減ります。GOSUBを呼んでおいて、GOTOでMAINループに戻ったりしたら、RETUENが呼ばれないままになってしまうかもしれないのです(下図)。そうなるとスタックは溜まるいっぽうになり、オバーフローしてしまうかもしれませんし、RETUENが呼ばれた時、予期せぬ所へジャンプしてしまうかもしれません。

Gosubgoto72

ということで、以上のことを踏まえて、もう一度、正しくGOSUBRETUENGOTOが使われているか確認して見て下さい。テンプレートだからと言って正しいとは限りませんよ。テンプレートに関しては、また別に書く予定でいます。

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

RZ1Basic v0.19 公開

Rz1bicon04

RZ1Basic v0.1.9を公開しました。

重大な不具合を見つけてしまいましたので、予定していたところまで新しくなっていませんが、新しいバージョンをアップしました。

更新内容

CONST(定数)を使っている場合、コンパイルエラーがでる不具合を修正しました。

●ADポート取得に関して

  1. 折れ線グラフ、ヒストグラム、データ一覧を、データ取得中でも表示できるようにした(ムービー)
  2. 取得したデータをExcelのファイルとして保存できるようにした。
    (データ一覧表示で、「Excelで保存」)

●ソースエディタで、ソースをHTMLとしてコピーできるようにした。

  • ソースコードを選択
  • 右クリックし「HTMLでコピー」を選択
  • ブログのHTML編集へコピー
  • ページとかで利用する為に付けました。さっそく利用してみました->

Rz1basicscreensnapz008

ADポート値取得中のムービー

------------

   

------------

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

RZ1ActionとRZ1BasicのCatch&Play機能

お受験も終わりましたねhappy01。そろそろロボザック作りを再開したいです。まだ30号までしか作ってないので、私はまだ使ってない機能なんですが、「Catch&Play機能(キャプチャー機能)」が、RZ1Actionにも、RZ1Basicにも、それらしき機能が付けてありますので、宣伝?紹介?しておきます。

Catch&Play機能というのは、ロボザックユーザーさんだと、oneプログラミング・シミュレータでポーズを決める。twoそのポーズをロボットに転送する。three実際にロボットの手足を動かして微調整する。fourその微調整したポーズをキャプチャーする。といった、一連の手順で、モーションを作って行く機能ってこと(かな)。

Parallels_desktopscreensnapz025ロボザックの冊子を全然見てないので、もう使い方は書いてあるのでしょうか?roboBASICでは、「コントローラー」メニューの「ヒューマノイド モーターコントロール」(図)で、Catch&Play機能を使うことができますね。ハイテックのページに「Catch&Play機能を利用したモーション制作」として、その説明があります。
 
 
【RZ1Action】は、ロボザックの3Dシミュレーションソフトで、かつ、Catch&Play機能を持っています。従って、3D画像と実ロボットとで、データをやりとりしながらポーズを決めていくのに便利だと思います。RZ1Actionのダウンロードページに書いてありますが、ここにも同じことを書いておきます。
Parallels_desktopscreensnapz027

RZ1Actionで作ったポーズをロボットへ送る
oneRZ1Actionでポーズを作る。
twoモータがオンになっている必要があります。もしオフの場合は、のボタンをクリックする前に、一度、のボタンをクリックして、モータをオンにしておいて下さい。
threeのボタンをクリックします。各モータのデータがロボットに送られ、ロボットがポーズをとります。※モータが動きます。指など挟んだりして怪我をしないよう注意して下さい。

《ライブモード》のボタンを「Option (ALT) 」+ クリックすると、のボタンの縁取りが変わり「ライブモード」になります。「ライブモード」状態では、RZ1Action右側の各モータの角度を設定するスライダーを動かしたりすると、ロボットにデータが送られます。※モータが動きます。指など挟んだりして怪我をしないよう注意して下さい。

ロボットのポーズを、RZ1Actionに読込む
oneロボットのモータを手で動かす場合は、モータがオフになっていないと動きません。無理矢理動かさないで、黄色のボタンをクリックして、モータをオフにしてから、モータを動かして下さい
twoのボタンをクリックします。ロボットのモータの状態を読込んで、RZ1Actionの3D画像に反映されます。
three「MOVE」のグループを選択し、書込みボタンをクリックすると、エディタのカーソルのある位置に、MOVEデータが書込まれます。
Parallels_desktopscreensnapz026

《ライブモード》のボタンを「Option (ALT) 」+ クリックすると、のボタンの縁取りが変わり「書込みモード」になります。「書込みモード」状態では、ロボットから読込んだ角度をエディタに直接、書き出します。
 
 
 
【RZ1Basic】には、現バージョンでは、3Dシミュレーションをともなった、Catch&Playはできませんが、roboBASICのようにダイアログを開けなくても、プログラミングをしながら右クリックでCatch&Playができるようになってます。

Parallels_desktopscreensnapz028

MOVE値をロボットへ送る
zeroモータがオフの場合、右クリックして、「サーボをオン」を選択
oneMOVEの行を選択
two右クリックして、メニューから「カーソル行のMOVEコマンドの値を...」を選択

ロボットのポーズを読込む
zeroモータがオンの場合、右クリックして、「サーボをオフ」を選択
oneロボットを目的のポーズにする
two右クリックして、メニューから「G24サーボの...貼付ける」や「G6xサーボの...貼付ける」の項目から、目的のものを選択すると、エディタにロボットから読込んだ角度が書き込まれます。
 
=================
いつ公開できるかはっきりしたことは言えませんが、次バージョン予定を簡単に書き留めておきます。

RZ1Action
●エディタを色付き(シンタックスに色が付くようにする)

RZ1Basic
●Windows版で特になんですが、エディタがひたすら遅いので、修正予定です。
●多用はしないと思うけど、オブジェクトの表示で使っているHEX表示を編集可能なHEXフィールドに改良予定
●ADポート取得で、得られたデータをExcelに吐き出せるようにする

ちょこちょことバグを見つけていますので、見つけたバグ次のバージョンで直しますが、私が気がついていないバグも多々あると思いますので、何か気がついたことがありましたら教えて下さい。

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

MIDIファイルからMUSICコマンド(3)

RZ1Basic v0.1.7で新しく付けたMIDIファイルを読込んで、roboBASICのMUSICコマンドにする機能ですが、簡単に手作りしたファイルなど単純なMIDIデータなら問題はないと思うのですが、ちゃんと作られているMIDIデータを読込むと、何がなんやらわからない曲になって、いまいち気に食わなかったので、もう少し改良し、RZ1Basic v0.1.8として公開しました。

Parallels_desktopscreensnapz020oneひとつは、トラックごとにデータを抽出していたのですが、さらに、選択したトラックの中のチャンネルごとに抽出するようにしました。これによって、主旋律だけピックアップできる可能性が高くなりました。なお、トラックを変更した際、音データがあるはずのトラックなのに、何も表示されなかった場合は、「CH」を別の番号にしてみて下さい。

Parallels_desktopscreensnapz024

two2つ目は、音の長さ「1」を全音符とすると、使えるのは8分音符までになってしまうので、曲によっては上手いこと変換できなかったので、1〜9の音の長さの設定は、音の長さの「比」なんで、音の長さ「8」をMIDIデータの何分音符に対応させるかを設定できるようにしました。「※音の長さ0の音符がいくつかふくまれています...」という赤文字のメッセージが出た場合、このポップアップメニューで音符の対応を変えてみて下さい。なお、これを変更させると連動してBMP (TEMPO)も変更されます。

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

RZ1Basic v0.1.8 公開

Rz1bicon04RZ1Basic v0.1.8を公開しました。

●MUSIC編集のスタンダードMIDIファイル(SMF)読み込みに関連して、
 1)トラックのチャンネル単位で読込むようにしました。
 2)音の長さの割り付けを変更できるようにしました。
●「ADポート読込み」で、シリアル未接続の状態で読み込みを開始すると、終了できなくなる不具合を修正しました。

ダウンロードはこちらからできます

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

ROBOBASIC講座(MUSIC)

【MUSIC(ミュージック)】
 音楽を演奏する
 書式: MUSIC "演奏文字列"
  例: MUSIC "8O4C#E4F#28C#4.E10"

演奏文字列について
《音程に関する文字列》
●ドレミファソラシは、普通に、英語表記のドレミと同じ、CDEFGABで記述します(図)
●シャープの場合は#または+、フラットの場合は$または-を、音程の後ろに書きます(図)
●どこのドレミなのかを示す文字は、オクターブのO(オー)と0から7の数値で表します(図)。初期値はO3です。1音ごとに記述する必要はありません。(例:O2ABO3CD)
●オクターブを指定するのではなく、オクターブ上げる場合は、<またはHが使えます。これと同じように、オクターブを下げる場合は、>またはLを使います。
(例:CDEFGAB<C)
(例:C>BAGFEDC)

Garagebandscreensnapz001_4
  
《音の長さについて》
音の長さに関しては、マニュアル的にも、コンパイル的にもバグがあります。少しややこしい話になってしまいますが、説明しますので、我慢して読んで下さい。。。

●音の長さは、0から9で表します。
●音の長さの数値の後ろに「.(ドット)」を付けると、1.5倍の長さになります。つまり付点付きの音符になると考えればいいでしょう。(例:4.C)
●「[(かぎかっこ)」を付けると、その後の音の長さが、1.5倍の長さになります。また、逆向きの「](かぎかっこ)」を付けると、元の長さに戻ります。(例:4AB>[CDEF]GAB)

さて、音の長さに関しては、上で書いた様な決まりになっていますが、0から9で指定する音の長さは、マニュアル的には、表1の様に記されています。なんか順番が変に感じます。
表1
Pagesscreensnapz001

 
そこで、音符が示す長さを比で書き表してみると表2ようになります。
表2
Pagesscreensnapz003

実際にroboBASICがコンパイルしている値を調べてみると表3のようになっていました。コンパイラは、1から9まで、1, 1/2, 1/3, 1/4. 1/5....という感じで長さをしていしていることがわかります。それから、0は、1と同じ値で、32分音符ではありませんでした。そこで、表2の比と照らし合わせてみると、1or 0=全音符、2=2分音符、4=4分音符、8=8分音符であることがわかります。16分音符や32分音符が指定できませんね。あと、付点付きの音符に対応する長さがありませんので、1から9の数値では付点付きは指定できないことがわかります。
表3
Pagesscreensnapz002

次に、ドットを付けると、0から9の値が、コンパイラではどうなっているかを調べてみました(表4)。表2の比と対応させてみると、ドット付きであらわすと、ちゃんと1.5倍にはなっているようです。
表4
Pagesscreensnapz005

従って、全、2分、4分、8分の音符は、1,2,4,8の数値を使う。付点付きは、2.,4.,8.を使えばいいということになりますね!!

で、これはバグと言っていいのか、よくわかりませんが、roboBASICでコンパイルすると、"0"は全音符と同じなんで、結局使われてないのと同じですよね。そこで、RZ1Basic v0.1.7では、コンパイルすると、"0"は96でなく、16分音符に対応する数値に変換するようにしてあります。具体的には6になります。従って"0."とすれば付点16分音符になります。

《休符について》
長々と音の長さに関して書いてたので書き忘れそうになってしまいました。
●半角スペース、P、(rest)の3種類の表記があります。音を鳴らさない時間は、上記の音の長さに連動します。(例:CDE CDE GEDCDED )

《初期値について》
●初期値に関して、オクターブは「O3」、音の長さは「4」になっています。

以上、長々と書いてしまいましたが、分りましたでしょうか?

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

MIDIファイルからMUSICコマンド(2)

は〜い、RZ1Basic v0.1.7で、MIDIファイルからMUSICコマンドとして読込めるようにしました!

簡単に使い方です!
 
Rz1basicscreensnapz005
1)MUSIC編集のウインドウを開きます。
2)左上の「Import SMF」というボタンをクリックし、MIDIファイルを選択して下さい。

Rz1basicscreensnapz006
3)MIDIデータを読込んで、図のようなダイアログが表示されます。
4)トラックが複数ある場合は、目的のトラックをポップアップの中から選択して下さい。
5)「OK」ボタンをクリックすると、MUSICデータとBPMが反映されます。

単音しか鳴らすことができないので、データが和音だったりした場合は、和音の中の一番最後に記録されていたもの音がピックアップされる仕組みになってます。一般のMIDIファイルに和音や複数トラックを使ってないことはないので、なかなか思ったようにならないかもしれません。

私は「Studio ftn Score Editor」というのをダウンロードして、このソフトで楽譜を書いて、MIDIで書き出して、それを読込んでいます。
Parallels_desktopscreensnapz015_2
 
いちおう「Studio ftn Score Editor」の使った場合の手順を簡単に書いておきます。
1)「Studio ftn Score Editor」を起動
2)五線譜の上でクリックすると音符が書込まれます。音符の種類は右クリックして変更できます。
Parallels_desktopscreensnapz014
 
3)どうせ単音しか鳴らせないので、CH=1のところだけに、以下の感じに楽譜を書いて、左下の再生ボタンで確認する。
Finderscreensnapz007

Parallels_desktopscreensnapz017
4)保存は、MIDIファイルとして保存しなくてはRZ1Basicで読めないので、保存の際は、図のように、SMF format 0か、SMF format 1を選択してMIDIファイルとして保存して下さい。トラックをひとつしか使わないので、SMF format 0で問題ないです。

5)あとは、上で書いた手順で、MIDIファイルをRZ1Basicで読込めばOKです。


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

RZ1Basic v0.1.7 公開

Rz1bicon04RZ1Basic v0.1.7を公開しました。

更新内容
●ファームv2.6で動作確認(v2.5でも使えます)(図:ファームウエアver)
●MUSIC編集で、MIDIファイルを読込めるようにした(図:Import SMF)
●MUSIC編集で、TEMPOを設定できるようにした(図)BPMの値も表示されます。
●音符を独自仕様で「0」を使えるようにした。
※これらMUSIC編集に関しては別口に書きます。

ダウンロードはこちらから
Finderscreensnapz006
 

| | コメント (0) | トラックバック (1)

ROBOBASIC講座(TEMPO)

【TEMPO(テンポ)】
 音楽を演奏する拍子を設定するコマンド
 書 式: TEMPO [値]
 初期値: 100
   例: TEMPO 120
      MUSIC "CDE CDE GEDCDED "

MIDIファイルからMUSICデータに変換する機能をRZ1Basicに付ける作業をしていますが、その関係でTEMPOに関して調べたので書いておきます。

TEMPOに設定する「値」なんですが、適当に入れてもらうと分るように、小さくすると遅くなり、大きくすると早くなりますね。

拍子には、二拍子、三拍子などがありますが、四拍子について、つまり四分音符が1分間に何回鳴るのかを、TEMPOの値に対してプロットしてみました(図)。ちなみに今回測定した1分間の拍子の数を、BPM(Beat Per Minuteの略)といいます。例えばiTunesで曲を選択して右クリック「情報を見る」の中にもこの設定値がありますよね。MIDIデータからもBPMを得ることができます。

ってか、これX軸とY軸、逆にプロットしないといけなかった...
MIDIファイルなどから得たBPMの値をTEMPOの値へ変換するのが目的なんだもんね。。。下手こいた〜〜〜σ(^_^;)アセアセ...ま、大したことじゃね〜ね。。

Prismscreensnapz002

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

無線化したいんだけど...

リモコンとか、ラジコンの話ではなく、データを転送したりする時につなぐシリアル通信を無線化したいという話なんです。みなさんはそんなこと思ったことないですか?私はソフト作ってるんで、ず〜っと繋げっぱなしで余計にそう思うのかなぁ??MacにはBluetoothが内蔵されているんで、それを使って無線化できないかなと思ってます。実現されている方はいらっしゃるんでしょうかね??

夢現工房さんの通販のページにBluetoothコードレスシリアルアダプタというのがあります。もしこれをロボザックさんに繋げるとしたら、電源の供給もACアダプタみたいだし、ミニジャック〜RS232Cのケーブルも必要だから、無線化しても、見た目、なんだかなぁ〜って感じ。。。

いい方法はないかと、ず〜っと思ってはいたんですが、先日、無線化.comで、ZEALというのを見つけました。1.5 x 2 cmの5円玉サイズのBluetoothモジュールです。これならロボザックさんのバックカバーの中にしまえそう!!!

しかし、ハード的なことは苦手で、果たしてこれを買って、繋がるかどうかもわからないし、繋げられるものだとしても、どう繋げばいいのか絶対わかんないよなぁ〜とかあれこれ考えていたのですが、どうしても気になって、具体的にやりたいことを書いて、MR-C3024の配線図のあるページを紹介して、メールで問い合わせたら、親切に教えて頂きました。

以下、お返事(抜粋)
--------------------------------------------------------------------
--------------------------------------------------------------------
おそらく入力は、バッテリからの6Vかと思いますが、
基板内のレギュレータで降圧しているようです。
電圧が3.3Vであれば、ZEALと直結できます。
違った場合には、ケーブルをロボットに抱かせることになります。

○改造
ただ、前回も伝えたとおりで、改造は困難です。
弊社製品の場合、C01よりもZ1の方が接続は容易かもしれません。
と言うのはコネクタ形状の問題です。
C01は0.5mmピッチのBtoBコネクタなので、線を引き出すことが非常に困難です。
Z1の場合は、2mmピッチのコネクタなので頑張れば何とかなるのかもしれません。

○接続
Z1の信号線は、以下のようになっております。
1:
2:RXD
3:TXD
4:
5:GND
6:
7:RTS
8:CTS
9:
10:MODE0
11:MODE1
12:VCC

直接つなぐ場合には
2:RXD → マイコン27番ピン
3:TXD → マイコン28番ピン
5:GND → マイコンGND
7:RTS → 未接続
8:CTS → マイコンGND
10:MODE0 → VCC
11:MODE1 → GND
12:VCC → VCC

となります。

以上が見解となります。
ただし、こちらも十分に試したわけでは御座いませんので、
特に改造などは自己責任でお願いしたく存じます。
--------------------------------------------------------------------
--------------------------------------------------------------------
とのことでした。

多分、電圧が違いますよね??直結できるかとちょっと期待したんですけど、無理っぽいですよね??
あと、MR-C3024とにらめっこしたけど、確かに「線を引き出すことが非常に困難」で改造は諦めだなぁ〜って感じ。。。ケーブルをロボットに抱かせるしか仕方ないのかなぁ。。。。

| | コメント (10) | トラックバック (0)

« 2008年1月 | トップページ | 2008年3月 »