スタジオ ミュウ

MYUROBO転送ソフト (myurobo.exe)

LED計測制御 | LEDグループ学習 | メロディのプログラム | RCサーボの制御 | モーターのPWM制御
MYUロボ-II | MYU-USB転送ソフト | MYU USB BASIC | USBドリトル | C アセンブラMYUUSB-1基板 | MYUUSB命令一覧
転送ソフト(232C) | MYU BASIC(232C) | 構造化ドリトル | エクセルで制御 | エクセルで計測 | MYUアセンブラ | MYUROBO-1A基板 | MYUロボ(232C)命令一覧 | ドリトル命令一覧

■MYU-527 ミュウロボ基本セット(RS-232C) 3,456円(8%税込)
■MYU-528 ミュウロボベルト基本セット(RS-232C) 3,456円(8%税込)
■MYU-529 3軸ミュウロボ基本セット(RS-232C) 4,212円(8%税込)
■MYU-530 ミュウロボ制御基板(RS-232C・2モーター用) 2,376円(8%税込)
■MYU-531 ミュウロボ制御基板(RS-232C・3モーター用) 2,592円(8%税込)

●MYUROBO転送ソフト (myurobo.exe) MYUROBOプログラム | リアルタイム計測 | 入出力プログラム | LEDの制御
myurobo.exeは簡単な操作で制御プログラムを作っていくことができます。命令は命令リストに表示されていてクリックすると解説ボックスに説明が表示されます。ダブルクリックすると編集ボックスに反映され制御プログラムを作っていくことができます。
日本語による解りやすい制御文、簡単な操作による入力条件の設定など複雑な動作も簡単で解りやすいプログラムを作ることができます。
また、パソコンにつないだままアナログ/デジタル計測・リモート操作など便利な機能もあります。

MYUROBO転送ソフト (myurobo.zip) はここからダウンロード(1M ※バグフィックス版 V1.1 2012/11/24)できます。
※630や88用などの以前のソフト(myurobosetup.zip)はここからダウンロードできます。

●起動方法
ダウンロードしたmyurobo.zipを展開しmyuroboホルダをCD-ROM・ハードディスク・サーバー・USBメモリなどにコピーしてください。ホルダ中のmyurobo.exeを実行するとMYUROBO転送ソフトが起動します。myurobo.exeを直接実行するのでインストール制限のある学校などでも使えます。

●プログラム
MYUROBO.EXEを立ち上げてください。編集ボックス内でプログラムを作っていきます。
開くボタンを押してMYUサンプル1.txtを読み込んでください。PCとMYUROBO-1A制御基板とを転送ケーブルで接続し転送ボタンを押すと下の画面になります。
右下のボックスにMYUロボ命令が表示されます。MYUロボ命令一覧をご覧ください。
転送しますか?<はい>で転送され'ピピ'と鳴り転送終了です。転送ケーブルを抜きタクトスイッチを押すとプログラムが実行されます。

編集ボックス
  転送プログラムを編集する場所です。
命令リスト
  ミュウロボで使われる命令リストです。命令はMYUロボ命令と制御命令に分かれています
  命令をクリックすると解説ボックスにその命令の説明が表示されます
  命令をダブルクリックすると編集ボックスに反映され制御プログラムを作っていくことができます
解説ボックス
  命令リスト内の命令をクリックすると命令の解説が表示されます
ファイルを開くボタン
  制御プログラムを読み込みます。拡張子は.txt
ファイル保存ボタン
  編集ボックスの制御プログラムを保存します。拡張子は.txt
クリアボタン
  編集ボックス内をクリアします
転送ボタン
  編集ボックス内の制御プログラムをMYUロボCodeに変換して転送します
COMポート設定ドロップダウンリスト
  COMポート(RS-232C)を選択します
16F88チェックボタn
  ミュウロボ2基盤の場合のみ、チェックを入れます

計測/リモートボタン(右のダイヤログが表れ、転送ケーブルを繋いだまま各種操作可能)
  ◆各種リモートボタン
    モーターや音のリモート操作ができます
  ◆RC0-RC7のチェックボックス
    ポートCの出力をビットごと設定できます。(LED制御に便利)
  ◆デジタル計測ボタン
    デジタル計測が始まりIn2-In4の状態がリアルタイムで見ることができる
  ◆アナログ計測ボタン(AN1-AN4)
    アナログ計測が始まり結果をリアルタイムで見ることができる
  ◆サーボスライダ
    SERVO-1から6のサーボをPCからコントロールできます
  ◆ステップインボタン
    基板のプログラムを1行づつ実行しレジスタの変化を見ることができます。デバッグモード
  ◆記録開始ボタン
    記録停止までの間、計測間隔ごとにアナログ計測値をファイル(myu.txt)に保存する
    Excelなどで結果を表やグラフにできる

◆命令のカスタマイズ
startup.iniやmyurobo.iniを編集すると命令をカスタマイズすることができます


●はじめてのMYUROBOプログラミング
MYU-527 ミュウロボ基本セット 3,360円(税込)を素材に簡単なプログラムを作ってみます。
myurusb.exeを立ち上げ命令リストの"前進"をクリックしてください。下の解説ボックスに説明が表示されます。
続けて"前進"をダブルクリックしてください。引数入力用ダイアログが現れます。"10"と入力し改行キーを押します。さらに改行して次の行に移動します。
同様に"右回り"をダブルクリック、引数を5と入力します。
※引数は、0-255 までの整数値を指定します。

前進,10
右回り,5

プログラムはこのようにして作っていきます。MYUROBO転送ソフトは最初に命令、コンマ、引数の順で書いていきます。命令には引数のないもの、引数が1つのもの、引数が2つのものがあります。詳しくはこちらをご覧ください。
このプログラムの動作は前進を1秒行い右回り0.5秒です。次にパソコンと基板とを転送ケーブルで接続し、転送ボタンを押し<はい>で転送されます。'ピピ'と鳴れば転送終了です。転送ケーブルを抜きタクトスイッチを押すとプログラムが実行されます。
プログラムは編集ボックスに直接書いても同じ結果となります。コンマや引数は全角文字も使えます。
転送されたプログラムは電源を切っても覚えています。ロボットの電源を入れタクトスイッチを押すと何回でも実行できます。

上のようなコースを作ってプログラムの練習をしてください。
※モーターなどのバラつきによりロボットはなかなか直進しません。前進命令の間に右前 左前 などの命令を入れ直進するようプログラムを修正します。

次に上のプログラムの上下に次の命令を追加してください。
アンカー,10    //アンカー番号10
  前進,10
  右回り,5
ジャンプ,10    //アンカー番号10へジャンプ

◆アンカーとジャンプ
プログラムは命令を順に実行しますが、ジャンプ命令はその流れを変えることができます。ジャンプ命令は引数と同じアンカー番号の所へジャンプします。
上の例では前進と右回りを繰返し実行しますからロボットは多角形を描くように動きます。
※アンカーは番号(1から127)を宣言するだけでなにも実行しません。
※アンカー番号の重複(同じアンカー番号を付けること)は禁止です。
※上のように繰り返すプログラムをループプログラムと呼びます。またアンカーとジャンプの間の命令は段落をつけると見やすくなります。
※//以下は次の行までコメントが書けます。コメントを残しておくと後からプログラムの内容が理解しやすくなります。
※プログラムは保存ボタンを押してファイル名を指定し保存するようにしてください。
※MYUROBOファイルの拡張子は'.txt'ですのでWINDOWSのメモ帳でもプログラムを編集できます。

◆入力ポートによる条件ジャンプ:入力ありジャンプと入力なしジャンプ
MYUROBO-1A基板は入力ポートを4個(In1-In4)持っています。入力ありジャンプと入力なしジャンプは、入力ポートの状態によって指定したアンカー番号にジャンプします。

入力ありジャンプ,m,n  //入力ポートn(1-4)が入力あり(ON)ならアンカー番号mにジャンプ
入力なしジャンプ,m,n  //入力ポートn(1-4)が入力なし(OFF)ならアンカー番号mにジャンプ

MYUROBO-1A基板の触覚は、入力ポートのIn2(左)とIn3(右)に接続されています。下の例は入力ポートの状態を調べ、触覚が障害物を感知したら後退して向きを変えるプログラムです。
触覚は左右にあり、どちらかが壁を感知したら「後退して向きを変える」というプログラムとなっています。

アンカー,10       //アンカー番号10を宣言
  前進
  入力ありジャンプ,11,2 //In2が入力ありなら11へジャンプ
  入力ありジャンプ,11,3 //In3が入力ありなら11へジャンプ
ジャンプ,10       //アンカー番号10にジャンプ
アンカー,11       //アンカー番号11を宣言
  後退,10
  左回り,10
ジャンプ,10       //アンカー番号10にジャンプ

下は、'入力なしジャンプ'命令を使った例です。同じ動きをします。

アンカー,10       //アンカー番号10を宣言
  前進
  入力ありジャンプ,11,2 //In2が入力ありなら11へジャンプ
  入力なしジャンプ,10,3 //In3が入力なしなら10へジャンプ
アンカー,11       //アンカー番号11を宣言
  後退,10
  左回り,10
ジャンプ,10       //アンカー番号10にジャンプ

MYUROBO転送ソフトではMYUロボ命令の引数を省略すると引数が 0 にセットされます。
※上の例の前進のように引数を省略すると前進の信号を出した後、待ち時間なしで次の命令を実行できます。

◆ブロックについて(サブルーチン)
プログラムで何回も同じ処理をすることがあります。この部分をサブルーチン(部品)化するとプログラムが見やすくコンパクトになります。
MYUROBO転送ソフトではブロックはじめからブロックおわりまでをブロックとよびサブルーチンとなります。
下は前のプログラムにメロディのブロックを追加したものです。最初と障害物を感知した時、動作します。
★このプログラムの動画(368K)はこちら

ブロック実行,10    //ブロック番号10の呼び出し
アンカー,10       //アンカー番号10を宣言
  前進
  入力ありジャンプ,11,2 //In2が入力ありなら11へジャンプ
  入力ありジャンプ,11,3 //In3が入力ありなら11へジャンプ
ジャンプ,10       //アンカー番号10にジャンプ
アンカー,11       //アンカー番号11を宣言
  ブロック実行,10    //ブロック番号10の呼び出し
  後退,10
  左回り,10
ジャンプ,10       //アンカー番号10にジャンプ
ブロックはじめ,10   //ブロック番号10、停止してメロディ
  停止
  電子音,2,48 電子音,2,46 電子音,2,44 電子音,2,42
  電子音,2,40 電子音,2,38 電子音,2,36 電子音,2,34
ブロックおわり

※ブロックは1から127までのブロック番号をつけ他のブロックと区別します。
※ブロックはプログラム内のどこに在ってかまいませんが、そのままではなにも実行しません。ブロック実行やブロック繰り返し命令を使うことで動作し処理の終わりとともに呼ばれた場所に戻ります。
※ブロック番号の重複(同じブロック番号を付けること)は禁止ですがアンカー番号との重複は可能です。
※ブロック内から他のブロックの呼出しは深さ16レベルまで可能です。
※ブロック内のジャンプは可能ですが飛び出しジャンプは禁止です。ブロックの途中からの抜け出しはブロック脱出を使います。

◆制御命令
ジャンプやブロック命令は番号を使うので複雑なプログラムでは解りにくくなってしまいます。
制御命令を使うと複雑な動作も簡単で解りやすいプログラムを書く事ができます。下は上のプログラムを制御命令を使って書いた例です。

クリアボタンを押し編集ボックスをクリアにします。制御命令用命令ボックス内の"繰り返す{}"をダブルクリック、続けて命令を入力し下のようにします。
繰り返す{    //{..}内を繰り返し実行
    前進,10
    右回り,5
}

※転送ボタンを押すと右下のボックスに転送されるMYUロボ命令が表示されます。ブロックやアンカー番号が自動的に割り当てられています。
※繰返し実行する制御文をループプログラムといいます。パソコンなど、ほどんどがループプログラムで動いています。
※ループプログラムは基板のスイッチOFFまで動き続けます。ループから抜けるには{..}内で"繰り返し脱出"命令を使うか"入力あり繰り返す(n){..}"か"入力なし繰り返す(n){..}"などの条件ループ文を使います。"繰り返す(2){..}"を使うとループの回数を指定できます。

上のプログラムは下のように1行で書くこともできます。1行で書く場合は"前進,10"と"右回り,5"の間に空白を入れます。

繰り返す{前進,10 右回り,5}

◆制御命令一覧
制御命令 説明
繰り返す{..} {..}内を繰り返し実行する。{..}内から脱出するには'繰り返し脱出'命令を使う
繰り返す(n){..} {..}内を n回繰り返す
繰り返す(A 比較 n){..} Aレジスタの値と n を比較して条件が成り立つ間、{..}内を繰り返す。比較式は(A = n)(A <> n)(A > n)(A < n)の4種類
入力あり(n){..} 入力ポート番号 n が入力ありなら{..}内を実行する。複数のポート番号指定の場合、'|'で区切るとOR条件、'&'ではAND条件となる
入力なし(n){..} 入力ポート番号 n が入力なしなら{..}内を実行する。複数のポート番号指定の場合、'|'で区切るとOR条件、'&'ではAND条件となる
そうでなければ{..} '入力あり'や'入力なし'の条件が成り立たない場合、{..}内を実行する
入力あり繰り返す(n){..} 入力ポート番号 n が入力ありの間、{..}内を繰り返し実行する。複数のポート番号指定の場合、'|'で区切るとOR条件、'&'ではAND条件となる
入力なし繰り返す(n){..} 入力ポート番号 n が入力なしの間、{..}内を繰り返し実行する。複数のポート番号指定の場合'|'で区切るとOR条件、'&'ではAND条件となる
繰り返し脱出 繰り返す命令の{..}内から抜け出し次の命令を実行する
もし(A 比較 n){..} Aレジスタの値と n を比較して条件が成り立てば{..}内を実行する。比較式は(A = n)(A <> n)(A > n)(A < n)の4種類
そうでなければ(A 比較 n){..} もし(A 比較 n)が成り立たない場合、別の条件を設定する
そうでなければ{..} すべての条件が成り立たない場合、{..}内を実行する
サブプログラム 名前{..} サブプログラム名を設定して{..}内にプログラムを書く。呼び出しは、サブプログラム名を使う
戻る サブプログラムの途中から呼ばれた場所に戻る

◆制御命令のフローチャート

◆入力ポートによる制御命令1:入力あり(n){..}と入力なし(n){..}
MYUROBO-1A基板は入力ポートを4個(In1-In4)持っています。基板の触覚は、入力ポートのIn2(左)とIn3(右)に接続されています。
下の例は入力ポートの状態を調べ、触覚が障害物を感知したら後退して向きを変えるプログラムです。
触覚は左右にあり、どちらかが壁を感知したら「後退して向きを変える」というプログラムとなっています。

編集ボックスをクリア、"繰り返す{}"をダブルクリック、"前進"を入力し"入力あり(){}"をダブルクリックすると右のダイヤログが現れます。
In2とIn3にチェックを入れ、ORにも入れOKボタンを押し以下のようにします。

繰り返す{    //{..}内を繰り返し実行
    前進
    入力あり(2 | 3){  //OR条件
        後退,10
        右回り,5
    }
}


※入力ポートの2と3のどちらかに入力がある場合、{..}内を実行します。(OR条件)、両方とも入力がなかった場合、{..}内は実行しないで次の命令を実行します。
※MYUROBO転送ソフトではMYUロボ命令の引数を省略すると引数が 0 にセットされます。
※上の例の前進のように引数を省略すると前進の信号を出した後、待ち時間なしで次の命令を実行できます。

◆ORとAND
入力ありと入力なし命令は (..) 内に複数の入力ポート番号を指定できます。'|'で区切るとOR条件、'&'ではAND条件となります。
OR:指定した入力番号のどれか1つの入力で{..}内を実行
AND:指定した入力番号全ての入力で{..}内を実行
※上のプログラムの(2 | 3)を(2 & 3)に変え動作の違いを理解してください。

下は"そうでなければ{..}"を使った例です。入力ありの条件が成り立たない場合、{..}内を実行します。

繰り返す{    //{..}内を繰り返し実行
    入力あり(2 | 3){  //OR条件
        後退,10
        右回り,5
    }
    そうでなければ{  //2と3とも入力がなかった場合、{..}内を実行
        前進
    }
}

◆入力ポートによる制御命令2:入力あり繰り返す(n){..}と入力なし繰り返す(n){..}
入力あり繰り返す(n){..}と入力なし繰り返す(n){..}は条件ループ文です。入力ポートの条件が成りたつ間、{..}内ループを繰り返し実行します。
下のプログラムも同じ動作をします。

"入力なし繰り返す(){}"をダブルクリックすると右のダイヤログが現れます。
In2とIn3にチェックを入れ、今度はANDに入れOKボタンを押します。

繰り返す{    //{..}内を繰り返し実行
    入力なし繰り返す(2 & 3){  //AND条件
        前進
    }
    後退,10
    右回り,5
}

※入力なし繰り返すは入力ポート 2と3の両方とも入力がない間、{..}内を繰り返し実行します。(AND条件)、どちらかの入力があると{..}内ループから抜け、次の命令を実行します。
※上のプログラムの(2 & 3)を(2 | 3)に変え動作の違いを理解してください。

◆{..}について
制御命令{..}は入れ子構造といって内部にいくつもの制御命令{..}を書くことができます。"{"と"}"はセットになっていて内側の制御命令{..}と区別します。
下の様に1行に書いたり行を変えたりできますが段落を付け{..}の範囲が解るように書いた方が良いでしょう。
{..}は全角文字の{..}、「..」、【..】なども使えます。

制御命令{
    制御命令
    {
        制御命令「..制御命令【..】..」
    }
}

◆定義
定義は複数の命令や引数を1つの言葉で定義することができます。第1引数で名前を定義して第2引数から次の行までの命令に置き換えます。
下はメロディを定義、最初と障害物を感知した時、動作をします。
※定義名は数字以外で始まり半角アルファベット、全角文字、数字が使えますが半角と全角の混在は禁止です。

定義,メロディ,停止 電子音,2,48 電子音,2,46 電子音,2,44 電子音,2,42 電子音,2,40 電子音,2,38 電子音,2,36 電子音,2,34
定義,方向転換,後退,10 右回り,5
メロディ
繰り返す{    //{..}内を繰り返し実行
    前進
    入力あり(2 | 3){  //OR条件
        メロディ
        方向転換
    }
}

◆サブプログラム
プログラムで何回も同じ処理をすることがあります。この部分をサブプログラムとしてメインプログラムとは別に作っておくとプログラムが見やすくコンパクトになります。
MYUROBO転送ソフトでは"サブプログラム サブプログラム名"に続き{..}内にプログラムを書きます。
サブプログラムはそのままではなにも動作しません。メインプログラムやサブプログラム内でサブプログラム名を使うことで呼び出され処理の終わりとともに呼ばれた場所に戻ります。

命令ボックスの"サブプログラム{}"をダブルクリックすると右のダイヤログが現れサブプログラム名を入力します。

メロディ
繰り返す{    //{..}内を繰り返し実行
    前進
    入力あり(2 | 3){    //OR条件
        メロディ    //サブプログラム メロディの呼び出し
        方向転換    //サブプログラム 方向転換の呼び出し
    }
}               //メロディからここまでがメインプログラム
サブプログラム メロディ{
    停止
    電子音,2,48 電子音,2,46 電子音,2,44 電子音,2,42
    電子音,2,40 電子音,2,38 電子音,2,36 電子音,2,34
}
サブプログラム 方向転換{
    後退,10
    右回り,5
}

※サブプログラム名は数字以外で始まり半角アルファベット、全角文字、数字が使えますが半角と全角の混在は禁止です。
※サブプログラムはどこに在ってかまいませんがプログラムの見やすさを考えるとメインプログラムの後ろに置いた方が良いでしょう。
※戻る命令を使うとサブプログラムの途中から戻れます。

◆Aレジスタ
MYUROBO-1A基板はマイクロコンピュターを搭載しています。この中のAレジスタは、1バイトの値(0-255)を記憶でき計算や数の比較などができます。
Aレジスタは命令の引数に使えます。Aレジスタの値によって動きを変えることができます。
また、アナログ計測の値をAレジスタに読み込むことができ応用範囲が広がります。
下の例1は前進の引数にAレジスタを使っています。Aレジスタの値を1から2つづ増やし前進する時間が変化するプログラムとなっています。

命令ボックスの"繰り返す(){}"をダブルクリックすると右のダイヤログが現れます。
(A < n)にチェックを入れ、Aレジスタと比較する数に16を入力、OKボタンを押し下のようにします。

//例1:多角形渦巻き旋回
A,1          //Aレジスタに1をセット
繰り返す(A < 16){  //Aレジスタが16より小さい間、{..}内を繰り返す
    前進,A    //前進の時間がAレジスタの値によって変化する
    右回り,5
    ADD,2    //Aレジスタに2を加える
}


※繰り返す(A 比較 n){..}はAレジスタとnを比較、条件が成り立つ間、{..}内を繰り返し実行します。(条件ループ文)

下の例2は距離センサーを使って壁までの距離を計測。Aレジスタに読み込まれた計測値によりロボットの動きを制御しています。

命令ボックスの"もし(){}"をダブルクリック、下のようにします。

//例2:距離センサーを使って一定の距離で止まるロボット
繰り返す{    //{..}内を繰り返し実行
    AN,4           //In4のアナログ値を計測、Aレジスタにセット
    もし(A < 60){       //壁が遠い場合(Aレジスタ値:0-59)
        前進
    }
    そうでなければ(A < 100){ //(Aレジスタ値:60-99)
        停止
    }
    そうでなければ{      //壁に近づきすぎたら(Aレジスタ値:100-255)
        後退
    }
}

※もし(A 比較 n){..}や そうでなければ(A 比較 n){..}はAレジスタとnを比較、条件が成り立った場合、{..}内を実行します。比較式は以下の4つあります。
(A = n):Aレジスタの値とnが同じ場合、{..}内を実行
(A <> n):Aレジスタの値とnが異なる場合、{..}内を実行
(A > n):Aレジスタの値がnより大きい同じ場合、{..}内を実行
(A < n):Aレジスタの値がnより小さい同じ場合、{..}内を実行

◆Aレジスタを使うときの注意
Aレジスタで扱う値は0〜255までの整数値ですので以下の注意が必要です。
※(A < 0)や(A > 255)の比較式の条件は成り立ちません。
※Aレジスタの値が255の時、1加えると0になります。同様に0の時、1引くと255になります。

◆Aレジスタ以外のレジスタ
IXレジスタ:インデックスレジスタ 0-79までの値をセットし、IXMレジスタの位置を指定する
IXMレジスタ:インデックスメモリ IXの値(0-79)によって格納される80個のレジスタメモリ
PAレジスタ:ポートAの値がセットされる。
PBレジスタ:ポートBの値がセットされる。
PCレジスタ:ポートCの値がセットされる。
T0LとT0Hレジスタ:タイマー0(250KHz)の下位8ビットと上位8ビットがセットされる。
AHレジスタ:16ビット演算の時、Aレジスタが下位8ビット、AHレジスタが上位8ビットとなる。
ARG1とARG2レジスタ:16ビット演算時使う他、CMD命令の引数となる。
※16ビット演算は符号付き整数(+32,767〜-32,768)のかけ算、わり算ができます。

◆レジスタ命令
よく使うレジスタ命令です。※扱う値は、8bit幅です。(0〜255の整数値)
命令 説明
A,n Aレジスタにnをセットします A,10
ADD,n Aレジスタの値とnを加え、Aレジスタの値とします ADD,10
SUB,n Aレジスタの値からnを引き、Aレジスタの値とします SUB,10
AND,n Aレジスタの値とnをAND演算し、Aレジスタの値とします AND,10
OR,n Aレジスタの値とnををOR演算し、Aレジスタの値とします OR,10
XOR,n Aレジスタの値とnををXOR演算し、Aレジスタの値とします XOR,10
CLA Aレジスタの値を0にします CLA
INCA Aレジスタの値を1増やします INCA
DECA Aレジスタの値を1減らします DECA
AN,n ポート番号nのアナログ値をAレジスタにセットします AN,4
PC,n PC(ポートC)にnを出力します PC,B'10101010'
PBA PB(ポートB)の値をAレジスタにセットします PBA
APC Aレジスタの値をPC(ポートC)に出力します APC
IX,n IXレジスタにnをセットします IX,10
IXM,n IXMレジスタにnをセットします IXM,10
IXMA IXMレジスタの値をAレジスタにセットします IXMA
AIXM Aレジスタの値をIXMレジスタにセットします AIXM
ARG1,n ARG1レジスタにnをセットします ARG1,10

◆パワーオンスタートについて
パワーオンスタート命令がプログラムの先頭に入っていると基板のスイッチONとともにプログラムがスタートします。この状態で新しいプログラムを転送するには、一旦スイッチを切り、転送ケーブルを接続してから基盤のタクトスイッチを押したまま基盤のスイッチを入れれば新しいプログラムを転送できます。

◆MYUROBOエラーについて
myuusb.exeでは転送ボタンを押した時、エラーチェックを行います。
文法エラーがあった場合、ダイヤログが現れエラー部分が表示され転送は中止されます。

◆MYUROBO-1A制御基板のエラーについて
MYUROBO-1A制御基板は深さ16レベル以上のサブプログラム呼び出しやIXを128以上にセットしIXMを使うとエラーとなり警告音を鳴らし続けます。

※エラーの場合は一旦電源を切りプログラムを修正してから再転送してください。


●リアルタイム計測
基板とPCを転送ケーブルで接続、計測/R実行ボタンを押すと右のダイヤログが現れリアルタイム計測が出来ます。下はIn4(AN4)に光センサー(CDS)を接続したものです。

《リアルタイムデジタル計測》
デジタル計測ボタンを押してみてください。In2-In4の状態が解ります。触覚を障害物に接触させたりCDSの明るさを変えてください。In2-In4はポートBに接続されていますので値が変化するはずです。
《リアルタイムアナログ計測》
AN4計測ボタンを押してください。CDSの明るさによってアナログ値がリアルタイムで変化するのが解ります。制御プログラムのしきい値設定などの参考にできます。


リアルタイムアナログ計測値を参考に制御プログラムを作ってみます。
//一定の明るさで停止するロボット
繰り返す{    //{..}内を繰り返し実行
    AN,4           //In4のアナログ値を計測、Aレジスタにセット
    待つ,1          //0.1秒待つ
    もし(A < 100){       //明るい場合は前進(Aレジスタ値:0-99)
        前進
    }
    そうでなければ(A < 150){ //一定の明るさで停止(Aレジスタ値:100-149)
        停止
    }
    そうでなければ{      //暗い場合は後退(Aレジスタ値:150-255)
        後退
    }
}
※部屋の明るさによってしきい値を変えてやる必要があります。そのためにリアルタイムアナログ計測を行います。


●入出力プログラム  (MYUROBO-1A基板の回路図)
《主な仕様》
動作電圧: 2.5V-5.5V
クロック:8MHz タイマー1:250KHz
プログラムサイズ:255bytes
変数エリア:80bytes サブルーチンの深さ:20
最大3個のDCモータ駆動(各モータドライバ最大負荷:1W以内)
サーボモータ6個まで制御可能、またメロディのプログラムも可能
デジタル入力4BIT + 出力6BIT
アナログ入力:4チャンネル(8/10BIT)
16BIT符号付四則演算、デバッグ機能など

《PIC16F1823設定情報》
<入力ポート>
RA4 In1(タクトスイッチ)
RA3 シリアル信号入力用
RA2 In4
RA1 In3
RA0 In2

<出力ポート>
RA5 LED,圧電ブザー,シリアル信号出力用
RC5 S3,M2R
RC4 S2,M3L
RC3 S1,M3R
RC2 S6,M1L
RC1 S5,M1R
RC0 S4,M2L

◆ポート出力命令
上の回路図のとおりポートC(RC0-RC5)は出力に設定されていてモータの回転を制御しています。また、右下図のようにLEDを配線してLEDを光らせることができます。
ポート出力命令はポートCに値を出力でき3個のモータを自由にコントロールできます。
例えば、"前進"と"モーター左"と同時に動かすには下の表からRC4,RC2,RC0のビットを'1'にすることで可能になります。(10進値で21、2進値ではB'10101')

ポート出力,m,n   //第1引数m(0-255)x0.1秒だけ 第2引数の値n(0-255)をポートCに出力する

ポート出力命令は、出力する時間とポートCの下位6ビットとポートAの5ビット目を組み合わせた値を指定します。

レジスタ命令を使いポートCに直接、値を出力することもできます。待つ命令と組み合わせるとポート出力命令と同じ結果になります。

PC,n   //ポートCに値n(0-255)を出力する
待つ,m  //値(0-255)x0.1秒だけ待つ



※引数の入力に2進表記を使うとビット操作が解りやすくなります。特にLED制御に便利 (例: B'10100001')
※ポートCは、出力命令以外の命令の間も出力状態を維持します。前進の後、ブザー命令を実行するとブザーを鳴らしながら前進します。

//0.5秒ごとにAレジスタを1増やしポート出力(LED制御)
繰り返す{         //{..}内を繰り返す
    INCA       //Aレジスタの値を1増やす
    ポート出力,5,A //Aレジスタの値を0.5秒間ポートCに出力
}

◆デジタル入力
In1-In4はデジタル入力ポートです。これらはプルアップされていて入力が無い状態では'1'、入力があると'0'になります。
ポートAの値を読むことで入力ポート(in1-In4)の状態を判断できます。

//In2が押されたらブザーを鳴らす(ポートBの値を調べる例)
繰り返す{         //{..}内を繰り返す
    PAA        //ポートAの値をAレジスタにセット
    AND,B'1' //Aレジスタのビット0(In2部分)だけマスクする
    もし(A = 0){   //In2が押されたら{..}内を実行
        ブザー,1
    }
}

//In2が押されたらブザーを鳴らす(入力あり(){..}を使った例)
繰り返す{        //{..}内を繰り返す
    入力あり(2){  //In2が押されたら{..}内を実行
        ブザー,1
    }
}

◆アナログ入力
デジタル入力が有るか無いか'1'か'0'を返すのに対し、アナログ入力は入力電圧を8BIT(0-255)または10BIT(0-1023)の値として返します。
アナログ入力は、AN,n 命令を使います。n はアナログポートの番号です。

下の例はIn4(AN4)に光センサー(CDS)を接続しデジタルとアナログ入力の違いを表しています。
デジタルの場合、明るさの判断は一定ですが、アナログの場合プログラムでしきい値を変えることができます。
※In4とAN4は同じ場所です。デジタル入力はIn4、アナログ入力はAN4として機能します。
※CDSは明るいと抵抗値が下がり"入力あり"と同じ状態になり暗くなると逆に"入力なし"となる。

//CDSを使って明るさを計測、暗くなったらブザーを鳴らす(デジタル入力例)
繰り返す{         //{..}内を繰り返す
    入力なし(4){   //In4に接続したCDSが暗くなったら{..}内を実行
        ブザー,1
    }
}

//CDSを使って明るさを計測、暗くなったらブザーを鳴らす(アナログ入力例)
繰り返す{         //{..}内を繰り返す
    AN,4      //In4に接続したCDSを8ビットアナログ計測、計測値をAレジスタにセット
    もし(A > 100){   //アナログの場合、明るさのしきい値を変えることできる
        ブザー,1
    }
}



●LEDの制御
右図のようにLEDを配線して制御します。LED制御には2進数や16進数を使うと便利です。
2進数の'1'はLEDの点灯、'0'は消灯となります。

//LEDを1つおき交互に光らせる
繰り返す{         //{..}内を繰り返す
  ポート出力,1,B'010101'   //ポートCにB'010101'を0.1秒間出力
  ポート出力,1,B'101010'   //ポートCにB'101010'を0.1秒間出力
}

//0.1秒ごとにポートCの値を1づつ増やす
繰り返す{         //{..}内を繰り返す
  INCA     //Aレジスタの値を1増やす
  APC      //Aレジスタの値をポートCに出力
  待つ,1    //0.1秒の待ち時間
}

//LED Shift タクトスイッチ(In1)を押している間LEDが左へ離している間右へ移動点灯する
A,1         //最初にAレジスタに1をセット、値を変えるとシフトパターンが変わる
繰り返す{      //{..}内を繰り返す
  APC       //Aレジスタの値をポートCに出力
  待つ,1     //0.1秒のウエイト
  入力あり(1){  //In1を押したら
    RLA     //Aレジスタを左シフト
  }
  そうでなければ{
    RRA     //Aレジスタを右シフト
  }
}

◆2進数と16進数
コンピュータデータの最小単位はビットです。1か0、ONかOFFかです。
これが8つ集まった単位がバイトとなります。
1バイトはB'00000000'からB'11111111'までの数、0から255までの数字を扱います。
16進数は4ビットを0からFの1文字で表しますから1バイトは上位4ビット、下位4ビットの2文字で表現します。
10進数の34は、2進数で表すとB'00100010'となり、16進では左表からH'22'と表します。
ポート出力命令やLED制御ではビットごとのデータを扱うので2進数や16進数を使うと便利です。

◆16進数、2進数やリテラル入力例
前進,H'0A'    //16進入力 10進数の10と同じ
前進,B'1010'   //2進入力 10進数の10と同じ
前進,"@"     //リテラル入力 @の文字コードは64なので、前進,64 となる
※16進数や2進数を使うとビット単位の設定が解りやすくなります。