スタジオ ミュウ

構造化ドリトル

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%税込)

●書籍、「ドリトルで学ぶプログラミング」「ドリトル、eBASICによる計測・制御とプログラミング」が出版されました。イーテキスト研究所
Amazon(通販)とジュンク堂(通販/店舗)で購入できます。

ドリトルは学校教育(小中高)の入門用プログラミング言語です。 最新のオブジェクト指向の考え方でプログラムを学ぶことができます。ドリトルには標準でMYUオブジェクトが用意されていて簡単に制御プログラムを書くことができます。ドリトル入門はこちら!
※ドリトルは兼宗 進さんが開発されたフリーソフトです。

●構造化ドリトル プログラム | 制御命令一覧 | 入出力プログラム | LEDの制御
構造化ドリトルは、アンカー・ジャンプ命令(GOTO文)を使わないMYUロボ用構造化ロボット言語です。
If文やLoop文などを日本語を使って簡潔に書くことができます。
※構造化ドリトルは青木 浩幸さんが作り追加された機能です。


ドリトルV2.1(dolittleMYU210.zip)は、ここからダウンロードできます。(34MB 2010/2/28版)
※V2.1 ElseIf文、2進、16進数対応、V2以前のファイルを読み込むと文字化けします。この場合は前のファイルをメモ帳で開き、文字コードをUTF-8で保存しなおすと読み込めます。またはメモ帳の文章をコピーして編集画面に貼り付けても可能です。
※dolittleMYU210.zipは、JAVAの配布条件を満たしドリトル作者の許可を得て作ったパッケージです。
●起動方法
dolittleMYU210.zipを展開しdolittleホルダをCD-ROMやハードディスク・サーバー・USBメモリなどにコピーしてください。ホルダ内のdolittle.batを実行するとドリトルが起動します。
※CD-ROMは起動に時間がかかりおます。
ドリトルHPからは最新版がダウンロードできます。

●よくある質問
Q、パソコンにRS-232Cポートがありません?
A、変換ケーブルが必要です。Googleで"USB RS232 変換"と検索してみてください。
変換ケーブルは1,000円-5,000円ぐらいです。
※変換ケーブルは付属の専用ドライバをインストールする必要があります。
Q、変換ケーブルを付けたのですがcom番号がわかりません?
A、com番号を調べるには、WindowsXPの場合、変換ケーブルを接続してからマイコンピュータを右クリックしてプロバティを開き、ハードウェアタグをクリック、デバイスマネージャを開きポート(COM と LPT)を見るとわかります。(右の例ではcom1)
※変換ケーブルは付属の専用ドライバをインストールする必要があります。

●プログラム
ドリトルを立ち上げ編集画面タグをクリックしてください。ここがプログラムを編集する場所です。
開くボタンをクリック、'構造化myusample2.dtl'を読み込むと下の画面になります。
実行ボタンを押すとプログラムを転送する画面となります。PCとミュウロボ制御基板とを転送ケーブルで接続し、実行画面の転送ボタンを押すと転送が始まります。'ピ'・・と音がして転送が始まり最後に'ピピ'と鳴れば転送終了です。転送ケーブルを抜きタクトスイッチを押すとプログラムが実行されます。


●はじめての構造化ドリトルプログラミング
ミュウロボ基本セットを素材に簡単なプログラムを作ってみます。

//ドリトルプログラム<制御プログラムのテンプレート>
ロボ太=MYU!"com1"作る。    //シリアルポートが2番の場合、com2となる
ロボ太:転送命令=「!はじめロボット

 //ここに制御プログラムを書く 命令一覧はこちら

おわりロボット」。
ロボ太!転送命令。


ミュウロボベルト基本セット
上のプログラムがドリトルの基本テンプレートです。これを利用して制御プログラムを作っていきます。
ドリトルを立ち上げ編集画面をクリック、上のテンプレートをコピーして編集画面に貼り付けます。
次に制御プログラムを書く部分を以下のようにします。

ロボ太=MYU!"com1"作る。      //ロボ太というオブジェクトを作りシリアルポートも設定する
ロボ太:転送命令=「!はじめロボット  //「!・・・」。内の命令を転送命令として定義する
 10 前進 5 右回り
おわりロボット」。
ロボ太!転送命令。           //ロボ太に転送命令を送り、実行する

ドリトルのプログラムは、'10 後退 5 右回り'のように日本語の語順に従い、最初に引数、スペース、命令の順で書いていきます。命令には引数のないもの、引数が1つのもの、引数が2つのものがあります。詳しくはこちらをご覧ください。
このプログラムの動作は前進を1秒行い右回り0.5秒です。次に実行ボタンを押します。
PCとミュウロボ制御基板とを転送ケーブルで接続し、実行画面の転送ボタンを押すと転送が始まります。'ピ'・・と音がして転送が始まり最後に'ピピ'と鳴れば転送終了です。転送ケーブルを抜きタクトスイッチを押すとプログラムが実行されます。
転送されたプログラムは電源を切っても覚えています。ロボットの電源を入れタクトスイッチを押すと何回でも実行できます。
※//以降次の行までコメントを書けます。コメントを残しておくと後からプログラムの内容が理解しやすくなります。

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

◆オブジェクト指向プログラミング
オブジェクトは「物」のことです。値と能力を持ちます。ここでは最初から用意されているMYUオブジェクトからロボ太というオブジェクトを作ります。次にロボ太オブジェクトに転送命令という新しい命令(メソッド)を定義します。最後にロボ太に転送命令を送り、実行します。
※ロボ太や転送命令など自由に名前をつけることができます。

次に上のプログラムの前後に次の命令を追加してください

ロボ太=MYU!"com1"作る。    //シリアルポートが2番の場合、com2となる
ロボ太:転送命令=「!はじめロボット
 「!10 前進 5 右回り」繰り返す
おわりロボット」。
ロボ太!転送命令。

「!...」繰り返す は制御文といって「!...」内を無限に繰り返します。上のプログラムを実行するとロボットは多角形を描くような動きを繰返すはずです。このように制御文を使うとおもしろい動きが実現できます。またプログラムは保存ボタンを押してファイル名を指定し保存するようにしてください。
※繰返し実行する制御文をループ文といいます。構造化ドリトル制御命令一覧はこちら!
※「!...」繰り返す は無限ループとなりプログラムは永遠に終了しません。ループから抜けるには「!...」内で 繰り返し脱出 などの命令を使うほか、「!n 入力あり」の間「!...」実行 「!n 入力なし」の間「!...」実行 などの条件ループを使います。
※「!...」3 繰り返す とすると「!...」内を3回繰り返した後、ループから抜けます。

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

ロボ太=MYU!"com1"作る。    //シリアルポートが2番の場合、com2となる
ロボ太:転送命令=「!はじめロボット
 「!前進
   2 入力あり「!10 後退 10 左回り」実行 //触覚右(In2)が押されたら「!...」を実行
   3 入力あり「!10 後退 10 左回り」実行 //触覚左(In3)が押されたら「!...」を実行
 」繰り返す

おわりロボット」。
ロボ太!転送命令。

下は、In2とIn3のどちらかが'入力あり'の場合「!...」を実行というOR(論理和)条件の例です。

ロボ太=MYU!"com1"作る。    //シリアルポートが2番の場合、com2となる
ロボ太:転送命令=「!はじめロボット
 「!前進
   「!2 入力あり」か「!3 入力あり」なら //左右どちらかの触覚が壁を感知したら「!...」を実行
   「!10 後退 10 左回り」実行
 」繰り返す

おわりロボット」。
ロボ太!転送命令。

下の2つは、In2とIn3の両方が'入力なし'の間「!...」を繰り返し実行というAND(論理積)条件を使った条件ループ文の例です。

ロボ太=MYU!"com1"作る。    //シリアルポートが2番の場合、com2となる
ロボ太:転送命令=「!はじめロボット
 「!
   「!「!2 入力なし」「!3 入力なし」全部本当」の間「!前進」実行  //左右両方の触覚が壁を感知しない間「!...」を繰り返し実行
   10 後退 10 左回り
 」繰り返す

おわりロボット」。
ロボ太!転送命令。

ロボ太=MYU!"com1"作る。    //シリアルポートが2番の場合、com2となる
ロボ太:転送命令=「!はじめロボット
 「!
   「!「!2 入力なし」で「!3 入力なし」なら」の間「!前進」実行  //左右両方の触覚が壁を感知しない間「!...」を繰り返し実行
   10 後退 10 左回り
 」繰り返す

おわりロボット」。
ロボ太!転送命令。

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

構造化ドリトルはユーザーが命令を定義することができます。ユーザー定義命令を使うとプログラムが見やすくなります。
下は前のプログラムにメロディのユーザー定義命令を追加したものです。最初と障害物を感知した時、動作します。
また 'Uターン' のように解りやすい名前を定義することで理解しやすいプログラムを書くことができます。
★このプログラムの動画(368K)はこちら

ロボ太=MYU!"com1"作る。    //シリアルポートが2番の場合、com2となる
ロボ太:メロディ=「!停止
 2 48 電子音 2 46 電子音 2 44 電子音 2 42 電子音
 2 40 電子音 2 38 電子音 2 36 電子音 2 34 電子音」。
ロボ太:Uターン=「!10 後退 10 左回り」。

ロボ太:転送命令=「!はじめロボット
 メロディ
 「!前進
   「!2 入力あり」か「!3 入力あり」なら //左右どちらか(OR条件)の触覚が押されたら「!...」を実行
   「!メロディ Uターン」実行
 」繰り返す
おわりロボット」。
ロボ太!転送命令。

ユーザー定義命令はブロック(サブルーチン)化することができます。ユーザー定義命令を複数の場所で使う場合、ブロック化すると転送プログラムサイズをコンパクトにできます。下はユーザー定義命令"メロディ"をブロック化したものです。転送プログラムサイズが小さくなります。(76→57バイト)

ロボ太=MYU!"com1"作る。    //シリアルポートが2番の場合、com2となる
ロボ太:メロディ=「!停止
 2 48 電子音 2 46 電子音 2 44 電子音 2 42 電子音
 2 40 電子音 2 38 電子音 2 36 電子音 2 34 電子音」。
ロボ太!"メロディ"ブロック化。
ロボ太:Uターン=「!10 後退 10 左回り」。
ロボ太:転送命令=「!はじめロボット
 メロディ
 「!前進
   「!2 入力あり」か「!3 入力あり」なら //左右どちらか(OR条件)の触覚が押されたら「!...」を実行
   「!メロディ Uターン」実行
 」繰り返す
おわりロボット」。
ロボ太!転送命令。

構造化ドリトルではAレジスタを使った演算ができます。下のプログラムは触覚が障害物を感知した回数をカウントし、3回ごとにメロディを2回鳴らすというものです。レジスタ命令はこちら!

ロボ太=MYU!"com1"作る。    //シリアルポートが2番の場合、com2となる
ロボ太:メロディ=「!停止
 2 48 電子音 2 46 電子音 2 44 電子音 2 42 電子音
 2 40 電子音 2 38 電子音 2 36 電子音 2 34 電子音」。
ロボ太!"メロディ"ブロック化。
ロボ太:Uターン=「!10 後退 10 左回り」。
ロボ太:転送命令=「!はじめロボット
 CLA                        //Aレジスタの値を0にします
 メロディ
 「!前進
   「!2 入力あり」か「!3 入力あり」なら「! //左右どちらか(OR条件)の触覚が押されたら「!...」を実行
     INCA                     //Aレジスタの値を1増やす
     「!3 等しいA」なら「!メロディ CLA」実行  //Aレジスタが3ならメロディを実行しAレジスタをクリア
     メロディ Uターン
   」実行
 」繰り返す
おわりロボット」。
ロボ太!転送命令。

※「!...」内のプログラムが複数行になる場合は、段落をつけて書くと見やすくなります。

<リモコンモード>
ミュウロボとパソコンを転送ケーブルでつなげたまま以下のプログラムを実行するとリモコン操作ができます。

//ロボットと転送ケーブルでつないでリモコン操作
ロボ太=MYU!"com1"作る。
ロボ太!ひらけごま 消える。
前進ボタン=ボタン!"前進" 作る -220 150 位置。
前進ボタン:動作=「ロボ太!前進」。
後進ボタン=ボタン!"後進" 作る 0 150 位置。
後進ボタン:動作=「ロボ太!後退」。
左前ボタン=ボタン!"左回り" 作る -220 100 位置。
左前ボタン:動作=「ロボ太!左回り」。
右前ボタン=ボタン!"右回り" 作る 0 100 位置。
右前ボタン:動作=「ロボ太!右回り」。
上ボタン=ボタン!"上" 作る -220 50 位置。
上ボタン:動作=「ロボ太!モーター左」。
下ボタン=ボタン!"下" 作る 0 50 位置。
下ボタン:動作=「ロボ太!モーター右」。
停止ボタン=ボタン!"停止" 作る -110 -10 位置。
停止ボタン:動作=「ロボ太!停止」。
音1ボタン=ボタン!"音1" 作る -220 -70 位置。
音1ボタン:動作=「ロボ太!15 電子音」。
音2ボタン=ボタン!"音2" 作る -110 -70 位置。
音2ボタン:動作=「ロボ太!16 電子音」。
終了ボタン=ボタン!"終了" 作る 0 -70 位置。
終了ボタン:動作=「ロボ太!とじろごま」。

※いろいろなロボットの工作例はこちら
※メロディなど音階の設定はこちら
※ゆっくり前進したいなどモーターのスピードをコントロールするにはこちら
※RCサーボの制御はこちら

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

◆構造化ドリトルのエラーについて
構造化ドリトルでは実行ボタンを押した時、エラーチェックを行います。
文法エラーがあった場合、ダイヤログが現れエラー部分が表示されます。

◆ミュウロボ制御基板のエラーについて
ミュウロボ制御基板では以下の場合、エラーとなり警告音を鳴らし続けます。
1、127バイト以上の転送。
CPUがPIC16F688の場合は255バイト
2、深さ8レベル以上のブロック呼び出し。
CPUがPIC16F688の場合は22レベル
3、16F688専用の命令をPIC16F630に転送したとき。
※エラーの場合は一旦電源を切りプログラムを修正してから再転送してください。


●構造化ドリトル制御命令一覧
命令 説明
n 入力あり「!...」実行 入力nがONならば「!...」を実行します 2 入力あり「!前進」実行
「!n 入力あり」なら「!...」実行
n 入力なし「!...」実行 入力nがOFFならば「!...」を実行します 2 入力なし「!後退」実行
「!n 入力なし」なら「!...」実行
n 入力あり「!...」そうでなければ「!---」実行 入力nがONならば「!...」を実行し,
そうでないときは「!---」を実行します
2 入力あり「!前進」そうでなければ「!後退」実行
「!n 入力あり」なら「!...」そうでなければ「!---」実行
n 入力なし「!...」そうでなければ「!---」実行 入力nがOFFならば「!...」を実行し,
そうでないときは「!---」を実行します
2 入力なし「!後退」そうでなければ「!前進」実行
「!n 入力なし」なら「!...」そうでなければ「!---」実行
ElseIf文
「!<条件1>」なら「!.」
そうでなければ「!<条件2>」なら「!..」
そうでなければ「!<条件3>」なら「!...」
そうでなければ「!---」実行
<条件1>が真なら「!.」を実行
<条件2>が真なら「!..」を実行
<条件3>が真なら「!...」を実行
全条件が成り立たないときは「!---」実行
 「!100 超えるA」なら「!右回り」
そうでなければ「!80 超えるA」なら「!左前」
そうでなければ「!70 超えるA」なら「!前進」
そうでなければ「!右前」実行
OR条件
「!<条件1>」か「!<条件2>」なら「!...」実行
<条件1><条件2>のどちらかが真なら「!...」実行
「!2 入力あり」か「!3 入力あり」なら「!停止」実行
AND条件
「!<条件1>」で「!<条件2>」なら「!...」実行
<条件1><条件2>の両方が真なら「!...」実行
「!2 入力あり」で「!3 入力あり」なら「!停止」実行
「!n 入力あり」の間「!...」実行 入力nがONである間「!...」を繰り返し実行します 「!1 入力あり」の間「!5 ブザー 2 時間」実行
「!n 入力なし」の間「!...」実行 入力nがOFFである間「!...」を繰り返し実行します 「!1 入力なし」の間「!5 ブザー 2 時間」実行
実行脱出 「の間」〜「実行」ブロックの中で使用し,
ブロックの実行を中止して次に進みます
「!3 入力あり」なら「!実行脱出」実行
再実行 「の間」〜「実行」ブロックの中で使用し,
現在の実行を終了し再度条件を検査します
「!3 入力あり」なら「!再実行」実行
「!...」n 繰り返す 「!...」をn回繰り返します。nが省略された
場合は無限に繰り返します。
「!5 ブザー 2 時間」 3 繰り返す
繰り返し脱出 「繰り返す」ブロックの中で使用し,
繰り返しを中止して次に進みます
「!2 入力あり」なら「!繰り返し脱出」実行
次繰り返し 「繰り返す」ブロックの中で使用し,
繰り返しの現在の回を終了し次の回に進みます
「!2 入力あり」なら「!次繰り返し」実行
●MYUロボレジスタ命令
構造化ドリトルではAレジスタを使って演算ができます。※Aレジスタは、8bit幅です。(0〜255の整数値が格納されます)
MYUアセンブラで定義されたAレジスタ関係の命令
命令 説明 Zフラグ Cフラグ
n A Aレジスタに指定した値を格納します 10 A    
n ADD Aレジスタの値と指定した値を加え、Aレジスタに格納します 10 ADD
n SUB Aレジスタの値から指定した値を引き、Aレジスタの値とします 10 SUB
n CMP Aレジスタとnを比較します Aレジスタは変化しません 10 CMP
CLA Aレジスタの値を0にします CLA  
INCA Aレジスタの値を1増やします INCA  
DECA Aレジスタの値を1減らします DECA  
※○はレジスタ命令実行後、ZフラグとCフラグが変化します。
※命令実行後、結果が 0 の場合は、Zフラグが、オーバーフローした場合は、Cフラグがセットされます。
構造化レジスタ命令
命令 説明
ZERO Zフラグがセットされているかどうか調べます 「!DECA ZERO」なら「!前進」実行
「!DECA ZERO」の間「!前進」実行
NZERO Zフラグがセットされていないかどうか調べます 「!DECA NZERO」なら「!前進」実行
「!DECA NZERO」の間「!前進」実行
CFLAG Cフラグがセットされているかどうか調べます 「!10 SUB CFLAG」なら「!CLA」実行
「!10 SUB CFLAG」の間「!CLA」実行
NCFLAG Cフラグがセットされていないかどうか調べます 「!10 CMP NCFLAG」なら「!10 SUB」実行
「!10 CMP NCFLAG」の間「!10 SUB」実行
n 等しいA 指定した値とAレジスタの値が等しいかどうか調べます 「!5 等しいA」なら「!前進」実行
「!5 等しいA」の間「!前進」実行
n 異なるA 指定した値とAレジスタの値が異なるかどうか調べます 「!5 異なるA」なら「!前進」実行
「!5 異なるA」の間「!前進」実行
n 以上のA 指定した値がAレジスタの値と等しいもしくは大きいかどうか調べます 「!5 以上のA」なら「!前進」実行
「!5 以上のA」の間「!前進」実行
n 以下のA 指定した値がAレジスタの値と等しいもしくは小さいかどうかを調べます 「!5 以下のA」なら「!前進」実行
「!5 以下のA」の間「!前進」実行
n 超えるA 指定した値がAレジスタの値より大きいかどうか調べます 「!5 超えるA」なら「!前進」実行
「!5 超えるA」の間「!前進」実行
n 未満のA 指定した値がAレジスタの値より小さいかどうかを調べます 「!5 未満のA」なら「!前進」実行
「!5 未満のA」の間「!前進」実行
「!...」A繰り返す Aレジスタの値の回数だけ繰り返します 「5 ブザー 2 時間」A繰り返す
●MYUロボコンソール命令
 MYUロボとの通信状態を表示するコンソール(GUI部品)について,各種設定を行います。
 コンソールの初期大きさは200×200(転送ボタン含まず),表示位置は-200,200(左上隅)です。
命令 説明
消える ロボットに送られる命令を表示するGUI部品を非表示にします ロボ!消える。
現れる ロボットに送られる命令を表示するGUI部品を表示します ロボ!現れる。
位置 ロボットに送られる命令を表示するGUI部品の位置を設定します ロボ!100 0 位置。
大きさ ロボットに送られる命令を表示するGUI部品の大きさを設定します ロボ!200 400 大きさ。
ロボ命令 MYUプログラムを原始的なMYUロボ命令(非構造化命令)で表示します。コンパイルの検証に用います ロボ!ロボ命令。
●管理命令
 MYUロボと通信を行ったり,各種設定を行うための命令です。
命令 説明
作る MYUロボが接続されているコンピュータのポートを指定して,新しいMYUロボオブジェクトを作ります ロボ=MYU!作る。
ロボ=MYU!『COM1』作る。
ひらけごま ロボットと通信を開始します。リモコンモードで必要です 接続するポートを指定することができます(「作る」で指定してあれば省略可*) ロボ!『COM1』ひらけごま。
ロボ!ひらけごま。
とじろごま ロボットとの通信を終了します ロボ!とじろごま。
はじめロボット はじめロボット ロボ!はじめロボット。
おわりロボット ロボットプログラムの終わりを表します ロボ!おわりロボット。
パワーオンスタート ロボットプログラムをスイッチオンと共に開始させます 「はじめロボット」の後に設定します ロボ!はじめロボット パワーオンスタート。
ブロック化 ユーザー定義命令を効率化のために「MYUブロック」にします ロボ!『ボール取得』ブロック化。

●構造化ドリトルの入出力プログラム

ミュウロボ制御基板はPIC16F630を使って入出力をコントロールしています。ポートAはRA5以外入力用、ポートCは出力に設定されています。

<PIC16F630>
動作電圧 2.0V-5.5V
内部クロック 4MHz
タイマー1 125KHz
RA ポートA
RC ポートC

<入力ポート>
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

<基板の入力ポート:In1-In4>
In1からIn4はセンサーなどを接続する入力ポートです。In1にはタクトスイッチが標準で接続されています。これらの入力ポートはプルアップされていて入力が無い状態ではHighとなっています。
入力の有無はPA(ポートA)を見ることで可能ですが、構造化ドリトルには入力のありなしによる制御文が用意されています。下はタクトスイッチ(In1)が押されたときブザーを鳴らすプログラム例です。上の回路図からスイッチが押されるとIn1(RA4)がLowになることを理解してください。

//1 入力ありを使う
ロボ太=MYU!"com1"作る。
ロボ太:転送命令=「!はじめロボット
 「!
  1 入力あり「!1 ブザー」実行
 」繰り返す
おわりロボット」。
ロボ太!転送命令。
//「!1 入力あり」の間を使う
ロボ太=MYU!"com1"作る。
ロボ太:転送命令=「!はじめロボット
 「!
  「!1 入力あり」の間「!1 ブザー」実行
 」繰り返す
おわりロボット」。
ロボ太!転送命令。
//ポートAのビット4(RA4)をチェックする
ロボ太=MYU!"com1"作る。
ロボ太:転送命令=「!はじめロボット
 「!
  「!PAA 16 AND ZERO」なら「!1 ブザー」実行
 」繰り返す
おわりロボット」。
ロボ太!転送命令。

これらのプログラムはどれも同じ動作をしますが転送プログラムサイズは異なります。
ポートAのビット4(RA4)だけを調べる方法ですがビット4は10進表記で16です。これとポートAとAND演算を行うことで可能です。このようにAND演算して特定のビットだけを選別することをマスクするといいます。

<基板の出力ポート:S1-S6>
S1からS6はRCサーボを制御するポートですが右図のように抵抗を介してLEDを光らせることもできます。またモータードライバー(SANYO LB1638)が接続されていてDCモーターの制御が可能です。
ドリトルの出力命令には"前進","右回り","停止"などのモーター制御命令、ポート出力命令などがある他、PA(ポートA)やPC(ポートC)に直接値を代入する方法もあります。
※モーター制御命令などの出力命令は、出力命令以外の命令の間も出力状態を維持します。前進の後、ブザー命令を実行するとブザーを鳴らしながら前進します。

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

ポート出力命令は、出力する時間とPIC16F630のポートCの下位6ビットとポートAの5ビット目を組み合わせた値を指定します。前進(5)とモーター左(16)を同時実行するには、それそれの値を加えた値(21)をポートに出力します。

m PA m PC PA(ポートA)やPC(ポートC)に直接値m(0-255)を出力する
m 時間   第1引数の時間m(0-255) x 0.1秒だけ待つ

上の表を参考に 5 PC を実行すると前進します。次に 10 時間 と続けると 10 前進 と同じ動作となります。
また、2進表記を使うとビット操作が解りやすくなります。前進とモーター左を同時実行するには、RC0,RC2,RC4 のビットを 1 にすることなので 0b10101 PC と書くことで可能となります。

上の回路図を見るとポートAのビット5は出力に設定され基板のLEDと圧電ブザーに繋がっています。これを0.1秒ごとに反転するプログラムを作ってみました。ビットを反転するにはXORを使います。
//0.1秒ごとに基板のLEDを点滅
ロボ太=MYU!"com1"作る。
ロボ太:転送命令=「!はじめロボット
 「!
  PAA   //PAの値をAレジスタにセット
  0b100000 XOR //AレジスタのBIT5を反転
  APA   //Aレジスタの値をにPAに
  1 時間 //0.1秒のウエイト
 」繰り返す
おわりロボット」。
ロボ太!転送命令。

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

ドリトルの16進表記
・0x10 (10進数の16)

ドリトルの2進表記
・0b10000 (10進数の16)



●ブレッドボードを使ったLEDの制御
ブレッドボードを使うと電子回路の実験が簡単にできます。ミュウロボ制御基板側には電子部品店で売られているシングルピンソケット(メス)を半田付けしてありブレッドボードのLEDとはジャンパー線を使って上右図の配線をしてあります。
基板で使われているPIC16F630はポートCが出力にセットされていて抵抗を介してLEDを直接点灯させることができます。

<ポート出力命令を使ってLEDを光らせる>
ポート出力命令は、出力する時間とPIC16F630のポートCの下位6ビット(RC0-RC5)とポートAの5ビット目を組み合わせた値を指定します。
※右上図の配線の場合、各LEDはポートCの値によって光ったり消えたりします。

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

◆2進数を理解する
右図は、10進数と2進数の比較表です。2進数の'1'はLEDの点灯、'0'は消灯となります。
ポート出力命令の第2引数を'5'とした場合、右表から2進数では'0101'となりますからLEDは1つおきに光ります。
逆に'1010'と光らせるには、ポート出力命令の第2引数を10進数の'10'と指定します。
下のプログラムは0.1秒ごとLEDを交互に光らせたものです。

//LEDを1つおき交互に光らせる
ロボ太=MYU!"com1"作る。
ロボ太:転送命令=「!はじめロボット
 「!
  1 0b0101 ポート出力   //ポートCに'0101'(5)を0.1秒間出力
  1 0b1010 ポート出力  //ポートCに'1010'(10)を0.1秒間出力
 」繰り返す
おわりロボット」。
ロボ太!転送命令。

◆2進数・16進数の表記方法
0b1010 と書くと2進数を表記できます。これは右表から10進数の10です。16進表記では 0xA となります。

※上のプログラムはLED4個を交互に光らせているものです。値を変えることでLED6個の制御ができます。

<ポートCに直接値をセットしてLEDを光らせる>
ポートC(PC)に値を入力後、時間命令(wait)を実行することでLEDを光らせることができます。

n PC   //ポートCにn(0-255)を出力、m(0-255)x0.1秒だけ待つ
m 時間

下のプログラムは0.1秒ごとLEDの2進数を1づつ増やすというものです。Aレジスタの値を1づつ増やしポートCに出力しています。
※Aレジスタを利用すると値の加減算や論理演算などができます。
※下のプログラムでは、INCA や APC などのミュウアセンブラ命令を使っています。ミュウアセンブラ一覧はこちら!

//0.1秒ごとにポートCの値を1づつ増やす
ロボ太=MYU!"com1"作る。
ロボ太:転送命令=「!はじめロボット
 「!
  INCA     //Aレジスタの値を1増やす
  APC      //Aレジスタの値をポートCに出力
  1 時間    //0.1秒の待ち時間
 」繰り返す
おわりロボット」。
ロボ太!転送命令。

MYUROBO-1基板には入力ポートを4個持っています。In1には標準でタクトスイッチが接続されています。下のプログラムはタクトスイッチを押した時、ポートCの値を1減らし離すと1増やすよう上のプログラムを改良したものです。

//タクトスイッチを押した時、ポートCの値を1減らし離すと1増やす
ロボ太=MYU!"com1"作る。
ロボ太:転送命令=「!はじめロボット
 「!
  1 入力あり      //タクトスイッチOnで
    「!DECA」     //Aレジスタの値を1減らす
  そうでなければ
    「!INCA」     //Aレジスタの値を1増やす
  実行
  APC      //Aレジスタの値をポートCに出力
  1 時間    //0.1秒の待ち時間
 」繰り返す
おわりロボット」。
ロボ太!転送命令。

コンピュータで扱う値の最小単位はビットです。2進数の'1'と'0'、LEDのONかOFFです。これが8つ集まった単位がバイト(0-255)となります。
下はAレジスタを使ったいろいろな演算命令です。計算結果を2進数(ビット)で表示してます。

演算の中にはビットを右シフト(RRA)や左シフト(RLA)する命令があります。
※右シフトすると値は半分に、左シフトすると値は倍になります。
下のプログラムはシフト命令を利用してタクトスイッチを押している間LEDが下か上へ、離している間上から下へ点灯するようにしてあります。

//LED Shift タクトスイッチを押している間LEDが下か上へ離している間上から下へ点灯する
ロボ太=MYU!"com1"作る。
ロボ太:転送命令=「!はじめロボット
1 PC       //最初に1をポートCに出力
「!
  1 時間     //0.1秒のウエイト
  「!1 入力あり」なら「!      //タクトスイッチOnで
    「!PCA 32 CMP ZERO」なら「!
      1 PC
    」そうでなければ「!
      PCA CLC RLA APC      //左シフト
    」実行
  」そうでなければ「!
    「!PCA 1 CMP ZERO」なら「!
      32 PC
    」そうでなければ「!
      PCA CLC RRA APC      //右シフト
    」実行
  」実行
」繰り返す
おわりロボット」。
ロボ太!転送命令。