構造化ドリトル |
ホーム | パーツ | 工作例 | ロボコン | ロボット教室 | ロボット制御 |
メロディのプログラム | センサープログラム | RCサーボの制御 | 入出力プログラム | モーターのPWM制御 | LEDの制御 | 計測と制御 MYU BASIC | MYUROBO転送ソフト | エクセルで制御 | エクセルで計測 | ミュウアセンブラ | 688基盤 | MYUROBO2基板 ミュウロボ命令一覧 | ミュウアセンブラ一覧 | 構造化ドリトル制御命令一覧 |
![]() ※ドリトル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からは最新版がダウンロードできます。
●よくある質問
![]() ドリトルを立ち上げ編集画面をクリック、上のテンプレートをコピーして編集画面に貼り付けます。 次に制御プログラムを書く部分を以下のようにします。
ロボ太=MYU!"com1"作る。 //ロボ太というオブジェクトを作りシリアルポートも設定する
ドリトルのプログラムは、'10 後退 5 右回り'のように日本語の語順に従い、最初に引数、スペース、命令の順で書いていきます。命令には引数のないもの、引数が1つのもの、引数が2つのものがあります。詳しくはこちらをご覧ください。
◆オブジェクト指向プログラミング
次に上のプログラムの前後に次の命令を追加してください
「!...」繰り返す は制御文といって「!...」内を無限に繰り返します。上のプログラムを実行するとロボットは多角形を描くような動きを繰返すはずです。このように制御文を使うとおもしろい動きが実現できます。またプログラムは保存ボタンを押してファイル名を指定し保存するようにしてください。 MYUROBO-1基板には入力ポートを4個持っています。In1には標準でリミットスイッチが接続されています。下は入力ポート1(In1)の状態をそれぞれの方法で判断し前方のリミットスイッチが障害物を感知したら後退して向きを変えるプログラムです。3種類のプログラムとも同じ動きをします。
ロボ太=MYU!"com1"作る。 //シリアルポートが2番の場合、com2となる ロボ太:転送命令=「!はじめロボット 10 前進 //最初に1秒前進 「!前進 1 入力あり「!10 後退 10 左回り」実行 //入力ポート1(In1)が押されたら「!...」を実行 」繰り返す おわりロボット」。 ロボ太!転送命令。
ロボ太=MYU!"com1"作る。 //シリアルポートが2番の場合、com2となる
構造化ドリトルではMYUロボ命令の引数を省略すると引数が 0 にセットされます。
構造化ドリトルはユーザーが命令を定義することができます。ユーザー定義命令を使うとプログラムが見やすくなります。
ロボ太=MYU!"com1"作る。 //シリアルポートが2番の場合、com2となる ユーザー定義命令はブロック(サブルーチン)化することができます。ユーザー定義命令を複数の場所で使う場合、ブロック化すると転送プログラムサイズをコンパクトにできます。下はユーザー定義命令"メロディ"をブロック化したものです。転送プログラムサイズが小さくなります。(71→52バイト)
ロボ太=MYU!"com1"作る。 //シリアルポートが2番の場合、com2となる 構造化ドリトルではAレジスタを使った演算ができます。下のプログラムはリミットスイッチが障害物を感知した回数をカウントし、3回ごとにメロディを2回鳴らすというものです。レジスタ命令はこちら!
ロボ太=MYU!"com1"作る。 //シリアルポートが2番の場合、com2となる ※「!...」内のプログラムが複数行になる場合は、段落をつけて書くと見やすくなります。
<リモコンモード>
◆パワーオンスタートについて
◆構造化ドリトルのエラーについて
◆ミュウロボ制御基板のエラーについて 2、深さ8レベル以上のブロック呼び出し。CPUがPIC16F688の場合は22レベル 3、16F688専用の命令をPIC16F630に転送したとき。 ※エラーの場合は一旦電源を切りプログラムを修正してから再転送してください。
| |||||||||||||||||||||||||||||||||||||||||||||||||
●構造化ドリトル制御命令一覧 | |||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||
●MYUロボレジスタ命令 構造化ドリトルではAレジスタを使って演算ができます。※Aレジスタは、8bit幅です。(0〜255の整数値が格納されます) MYUアセンブラで定義されたAレジスタ関係の命令 | |||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||
※○はレジスタ命令実行後、ZフラグとCフラグが変化します。 ※命令実行後、結果が 0 の場合は、Zフラグが、オーバーフローした場合は、Cフラグがセットされます。 | |||||||||||||||||||||||||||||||||||||||||||||||||
構造化レジスタ命令 | |||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||
●MYUロボコンソール命令 MYUロボとの通信状態を表示するコンソール(GUI部品)について,各種設定を行います。 コンソールの初期大きさは200×200(転送ボタン含まず),表示位置は-200,200(左上隅)です。 | |||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||
●管理命令 MYUロボと通信を行ったり,各種設定を行うための命令です。 | |||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||
●構造化ドリトルの入出力プログラム ミュウロボ制御基板はPIC16F630を使って入出力をコントロールしています。ポートAはRA5以外入力用、ポートCは出力に設定されています。
In1からIn4はセンサーなどを接続する入力ポートです。In1にはリミットスイッチが標準で接続されています。これらの入力ポートはプルアップされていて入力が無い状態ではHighとなっています。 入力の有無はPA(ポートA)を見ることで可能ですが、構造化ドリトルには入力のありなしによる制御文が用意されています。下はリミットスイッチ(In1)が押されたときブザーを鳴らすプログラム例です。上の回路図からスイッチが押されるとIn1(RA4)がLowになることを理解してください。
これらのプログラムはどれも同じ動作をしますが転送プログラムサイズは異なります。 ポートAのビット4(RA4)だけを調べる方法ですがビット4は10進表記で16です。これとポートAとAND演算を行うことで可能です。このようにAND演算して特定のビットだけを選別することをマスクするといいます。
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)を出力する
上の表を参考に 5 PC を実行すると前進します。次に 10 時間 と続けると 10 前進 と同じ動作となります。
上の回路図を見るとポートAのビット5は出力に設定され基板のLEDと圧電ブザーに繋がっています。これを0.1秒ごとに反転するプログラムを作ってみました。ビットを反転するにはXORを使います。
●ブレッドボードを使ったLEDの制御
基板で使われているPIC16F630はポートCが出力にセットされていて抵抗を介してLEDを直接点灯させることができます。
<ポート出力命令を使ってLEDを光らせる> m n ポート出力 //第1引数m(0-255)x0.1秒だけ 第2引数のデータn(0-255)をポートに出力する
//LEDを1つおき交互に光らせる
◆2進数・16進数の表記方法 ※上のプログラムはLED4個を交互に光らせているものです。値を変えることでLED6個の制御ができます。
<ポートCに直接値をセットしてLEDを光らせる>
n PC //ポートCにn(0-255)を出力、m(0-255)x0.1秒だけ待つ
下のプログラムは0.1秒ごとLEDの2進数を1づつ増やすというものです。Aレジスタの値を1づつ増やしポートCに出力しています。
//0.1秒ごとにポートCの値を1づつ増やす MYUROBO-1基板には入力ポートを4個持っています。In1には標準でリミットスイッチが接続されています。下のプログラムはリミットスイッチを押した時、ポートCの値を1減らし離すと1増やすよう上のプログラムを改良したものです。
//リミットスイッチを押した時、ポートCの値を1減らし離すと1増やす
コンピュータで扱う値の最小単位はビットです。2進数の'1'と'0'、LEDのONかOFFです。これが8つ集まった単位がバイト(0-255)となります。
//LED Shift リミットスイッチを押している間LEDが下か上へ離している間上から下へ点灯する |