//「ドレミ」を繰り返し演奏(転送ソフト)
繰り返す{
左点灯
電子音,5,80 //「ド」の音をを0.5秒ならす
右点灯
電子音,5,71 //「レ」の音をを0.5秒ならす
両点灯
電子音,5,63 //「ミ」の音をを0.5秒ならす
消灯,5 //両方のLEDを0.5秒間消す、音も出ない
}
※MYUロボ-IIソフトではMYUロボ命令の引数を省略することができます。省略すると待ち時間なしで次の命令を実行できます。
※ブザーや電子音は鳴っている間もLEDは点灯しています。
●ロボットのプログラム
下の命令を使ってプログラムします。※引数 n は、0〜255の整数値です
| 命令 |
説明 |
例 |
| 前進,n |
nx0.1秒だけ前進する |
前進,10 |
| 後退,n |
nx0.1秒だけ後退する |
後退,10 |
| 右回り,n |
nx0.1秒だけ右回りする |
右回り,10 |
| 左回り,n |
nx0.1秒だけ左回りする |
左回り,10 |
| 停止,n |
nx0.1秒だけ停止する |
停止,10 |
| 左前,n |
nx0.1秒だけ左側が前進する |
左前,10 |
| 左後,n |
nx0.1秒だけ左側が後転する |
左後,10 |
| 右前,n |
nx0.1秒だけ右側が前進する |
右前,10 |
| 右後,n |
nx0.1秒だけ右側が後転する |
右後,10 |
| 待つ,n |
直前の状態のまま、nx0.1秒だけ待つ |
待つ,10 |
前進や右回りなどの命令を使い引数(動作時間)をセットすることでロボットを動かすことができます。
下のようなコースを作ってプログラムの練習をしてください。

※モーターなどのバラつきによりロボットはなかなか直進しません。前進命令の間に右前 左前 などの命令を入れ直進するようプログラムを修正します。
下は、前進3秒の間に右前の命令を入れ、左方向に修正した例です。前進と右前の時間の比率を変え調整します。
前進,9
右前,1
前進,9
右前,1
前進,9
右前,1
●制御命令を使う
繰り返す{
前進,10
右回り,5
}
|
|
上の例では前進と右回りを繰返し実行しますからロボットは多角形を描くように動きます。
このプログラムは下のように1行で書くこともできます。1行で書く場合は"前進,10"と"右回り,5"の間に空白を入れます。
◆音を出しながらロボットを動かす
ブザーや電子音命令は、直前のロボットの動きを続けますからブザー音を出しながらロボットを動かすことができます。
下の命令を実行すると1秒間ブザーを鳴らしながら前進します。
前進
ブザー,10
◆触覚を使ったプログラム
MYUロボ-IIの触覚は、入力ポートのIn2(左)とIn3(右)に接続されています。下の例は入力ポートの状態を調べ、触覚が障害物を感知したら後退して向きを変えるプログラムです。
触覚は左右にあり、どちらかが壁を感知したら「後退して向きを変える」というプログラムとなっています。
◆入力ポートによる制御命令1:入力あり(p){..}と入力なし(p){..}
MYUロボ-II基板は入力ポートを4個(In1-In4)持っています。基板の触覚は、入力ポートのIn2(左)とIn3(右)に接続されています。
下の例は入力ポートの状態を調べ、触覚が障害物を感知したら後退して向きを変えるプログラムです。
触覚は左右にあり、どちらかが壁を感知したら「後退して向きを変える」というプログラムとなっています。
入力あり(p){..} //入力ポート番号(1-4) p が入力ありなら{..}内を実行する、入力ない場合{..}の次を実行する
入力なし(p){..} //入力ポート番号(1-4) p が入力なしなら{..}内を実行する、入力ある場合{..}の次を実行する
そうでなければ{..} //入力ありや入力なしの条件が成立たない場合、{..}内を実行する
※複数の入力ポート番号を指定する場合は、(p1 | p2 ..) OR条件、どれか1つの入力で{..}内を実行
※複数の入力ポート番号を指定する場合は、(p1 & p2 ..) AND条件、全ての入力で{..}内を実行
編集ボックスをクリア、"繰り返す{}"をドラック、"前進"を入力し"入力あり(){}"をドラックすると右のダイヤログが現れます。
In2とIn3にチェックを入れ、ORにも入れOKボタンを押し以下のようにします。
繰り返す{ //{..}内を繰り返し実行
前進
入力あり(2 | 3){ //OR条件
後退,10
右回り,5
}
}
|
←←
↑
→ ↑
↓↑
↓↑
← ↑
→→
|
|
※入力ポートの2と3のどちらかに入力がある場合、{..}内を実行します。(OR条件)、両方とも入力がなかった場合、{..}内は実行しないで次の命令を実行します。
※MYUロボ-IIソフトでは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){..}は条件ループ文です。入力ポートの条件が成りたつ間、{..}内ループを繰り返し実行します。
下のプログラムも同じ動作をします。
入力あり繰り返す(p){..} //入力ポート番号(1-4) p が入力ありの間、{..}内を繰り返し実行する、入力ない場合{..}の次を実行する
入力なし繰り返す(p){..} //入力ポート番号(1-4) p が入力なしの間、{..}内を繰り返し実行する、入力ある場合{..}の次を実行する
※複数の入力ポート番号を指定する場合は、(p1 | p2 ..) OR条件、どれか1つの入力で{..}内を実行
※複数の入力ポート番号を指定する場合は、(p1 & p2 ..) AND条件、全ての入力で{..}内を実行
"入力なし繰り返す(){}"をドラックすると右のダイヤログが現れます。
In2とIn3にチェックを入れ、今度はANDに入れOKボタンを押します。
繰り返す{ //{..}内を繰り返し実行
入力なし繰り返す(2 & 3){ //AND条件
前進
}
後退,10
右回り,5
} |
←←
← ↑
↑↑
→ ↑
↑
↑
→→
|
※入力なし繰り返すは入力ポート 2と3の両方とも入力がない間、{..}内を繰り返し実行します。(AND条件)、どちらかの入力があると{..}内ループから抜け、次の命令を実行します。
※上のプログラムの(2 & 3)を(2 | 3)に変え動作の違いを理解してください。
◆繰り返し脱出命令
制御命令の繰り返す{..}は、無限ループです。"繰り返し脱出"命令を使うと繰り返す{..}から脱出して次の命令を実行できます。
繰り返し脱出 //繰り返す{..} から抜け出し次の命令を実行する
下のプログラムは、左右のLEDにが点滅、左の触覚(In2)が入力を感知するとブザーが鳴り終了します。
入力なし繰り返す(2){
左点灯,1
右点灯,1
}
ブザー,2
'繰り返し脱出'命令を使った場合は、以下のようになります。
繰り返す{
左点灯,1
右点灯,1
入力あり(2){
繰り返し脱出
}
}
ブザー,2
◆制御命令一覧
| 制御命令 |
説明 |
| 繰り返す{・・・.} |
{・・・.}内を繰り返し実行する。{・・・.}内から脱出するには'繰り返し脱出'命令を使う |
| 繰り返す(n){・・・.} |
{.・・・}内を n回繰り返す |
| 繰り返す(A 比較 n){.・・・} |
Aレジスタの値と n を比較して条件が成り立つ間、{・・・.}内を繰り返す。比較式は(A = n)(A <> n)(A >
n)(A < n)の4種類 |
| 入力あり(p){・・・.} |
入力ポート番号 p が入力ありなら{.・・・}内を実行する。複数のポート番号指定の場合、'|'で区切るとOR条件、'&'ではAND条件となる |
| 入力なし(p){・・・.} |
入力ポート番号 p が入力なしなら{・・・.}内を実行する。複数のポート番号指定の場合、'|'で区切るとOR条件、'&'ではAND条件となる |
| そうでなければ{・・・.} |
'入力あり'や'入力なし'の条件が成り立たない場合、{・・・.}内を実行する |
| 入力あり繰り返す(p){・・・.} |
入力ポート番号 p が入力ありの間、{・・・.}内を繰り返し実行する。複数のポート番号指定の場合、'|'で区切るとOR条件、'&'ではAND条件となる |
| 入力なし繰り返す(p){・・・.} |
入力ポート番号 p が入力なしの間、{・・・.}内を繰り返し実行する。複数のポート番号指定の場合'|'で区切るとOR条件、'&'ではAND条件となる |
| タイマー繰り返す(n){・・・.} |
n x 0.1秒の間、{・・・.}内を繰り返し実行する。注、{・・・}内の命令は時間のかかるものは不可 |
| 繰り返し脱出 |
繰り返す命令の{・・・.}内から抜け出し次の命令を実行する |
| もし(A 比較 n){・・・.} |
Aレジスタの値と n を比較して条件が成り立てば{・・・.}内を実行する。比較式は(A = n)(A <> n)(A > n)(A
< n)の4種類 |
| そうでなければ(A 比較 n){..} |
もし(A 比較 n)が成り立たない場合、別の条件を設定する |
| そうでなければ{..} |
すべての条件が成り立たない場合、{..}内を実行する |
| サブプログラム 名前{..} |
サブプログラム名を設定して{..}内にプログラムを書く。呼び出しは、サブプログラム名を使う |
| 戻る |
サブプログラムの途中から呼ばれた場所に戻る |
※nは、0〜255の整数値 ※入力ポート番号 p は、1〜4の整数値(In1-In4)
●制御命令のフローチャート

●ポート出力命令
ポート出力命令を使うと前進とLED点灯を同時に行うなど細かい制御ができます。
ポート出力,n,m //n(0-255)x0.1秒だけ m(0-255)をポートCに出力する
下の表から"前進"はRC7とRC1、"右点灯"はRC6のビットを1にします。2進数で表すとB''11000010'になります。
ポート出力,10,B'11000010' //前進と右点灯を1秒間行う
ポートCの出力表(RC0-RC7)
| 命令 |
RC7 |
RC6 |
RC5 |
RC4 |
RC3 |
RC2 |
RC1 |
RC0 |
10進値 |
2進値 |
| 停止 |
|
|
|
|
|
|
|
|
0 |
B'0' |
| 左後 |
|
|
|
|
|
|
|
○ |
1 |
B'1' |
| 右前 |
|
|
|
|
|
|
○ |
|
2 |
B'10' |
| 右後 |
|
|
|
|
|
○ |
|
|
4 |
B'100' |
| 左前 |
○ |
|
|
|
|
|
|
|
128 |
B'10000000' |
| 前進 |
○ |
|
|
|
|
|
○ |
|
130 |
B'10000010' |
| 後退 |
|
|
|
|
|
○ |
|
○ |
5 |
B'101' |
| 右回り |
○ |
|
|
|
|
|
|
○ |
129 |
B'10000001' |
| 左回り |
|
|
|
|
|
○ |
○ |
|
6 |
B'110' |
| 右点灯 |
|
○ |
|
|
|
|
|
|
64 |
B'1000000' |
| 左点灯 |
|
|
|
|
○ |
|
|
|
8 |
B'1000' |
| 両点灯 |
|
○ |
|
|
○ |
|
|
|
72 |
B'1001000' |
●歩行者用信号機プログラム(制御命令を使った例)
プログラムがスタートするとLEDの赤が点灯します。左の触覚(In2)が入力を感知するとLEDが3秒間、緑に変わりその後、赤信号に戻ります。
繰り返す{
右点灯 //右のLEDを(赤)点灯
入力あり(2){
左点灯,30 //左のLEDを(緑)を3秒間点灯
}
}
下は、'入力なし繰り返す(n){..}' を使った例です。同じ動きをします。
繰り返す{
入力なし繰り返す(2){
右点灯 //右のLEDを(赤)点灯
}
左点灯,30 //左のLEDを(緑)を3秒間点灯
}
問題:緑信号の時、ブザーが同時に鳴るように考えてください。また、右の触覚(In3)でも動作するようにしてください。
◆定義
定義は複数の命令や引数を1つの言葉で定義することができます。第1引数で名前を定義して第2引数から次の行までの命令に置き換えます。
下はメロディを定義、最初と障害物を感知した時、動作をします。
※定義名は数字以外で始まり半角アルファベット、全角文字、数字が使えますが半角と全角の混在は禁止です。
定義,メロディ,停止 電子音,2,48 電子音,2,46 電子音,2,44 電子音,2,42 電子音,2,40 電子音,2,38 電子音,2,36 電子音,2,34
定義,方向転換,後退,10 右回り,5
メロディ
繰り返す{
前進
入力あり(2 | 3){ //OR条件
メロディ
方向転換
}
}
◆サブプログラム
プログラムで何回も同じ処理をすることがあります。この部分をサブプログラムとしてメインプログラムとは別に作っておくとプログラムが見やすくコンパクトになります。
MYUロボ-IIソフトでは"サブプログラム サブプログラム名"に続き{..}内にプログラムを書きます。
サブプログラム サブプログラム名{..} //{..}内にサブプログラムを書く
サブプログラム名 //サブプログラムを実行する
戻る //サブプログラム内から抜け出し呼ばれた所に戻る
※サブプログラム名は数字以外で始まり半角アルファベット、全角文字、数字が使えます。
サブプログラムはそのままではなにも動作しません。メインプログラムやサブプログラム内でサブプログラム名を使うことで呼び出され処理の終わりとともに呼ばれた場所に戻ります。
命令ボックスの"サブプログラム{}"をドラックすると右のダイヤログが現れサブプログラム名を入力します。
メロディ
繰り返す{
前進
入力あり(2 | 3){ //OR条件
メロディ //サブプログラム メロディの呼び出し
方向転換 //サブプログラム 方向転換の呼び出し
}
} //メロディからここまでがメインプログラム
サブプログラム メロディ{
停止
電子音,2,48 電子音,2,46 電子音,2,44 電子音,2,42 //空白で区切れば複数の命令を1行で書けます
電子音,2,40 電子音,2,38 電子音,2,36 電子音,2,34
}
サブプログラム 方向転換{
後退,10
右回り,5
}
※サブプログラムはどこに在ってかまいませんがプログラムの見やすさを考えるとメインプログラムの後ろに置いた方が良いでしょう。
※戻る命令を使うとサブプログラムの途中から戻れます。
◆PWM(パルス幅変調)制御
PWM制御は、右図のようにモーターのON,OFFの時間(デューティ比)を変えることでモーターの電圧をコントロールする方法です。
例えば電圧が3V、ONの時間が2、OFFの時間が1とするとモーターは 3V x デューティ比(2/3) = 2Vの電圧で駆動することになります。
これを利用すればLEDの明るさも変えることができます。
繰り返す(n){..} //{..}内を n 回繰り返す
下のプログラムは、制御命令の 繰り返す(n){..} を使いPWM制御を行っています。左右のモーターの回転差によってロボットは緩旋回します。
//右緩旋回
繰り返す{
繰り返す(20){ //繰返し数を大きくすると大回りになる
前進 //両モーターがON
}
繰り返す(10){ //繰返し数を大きくすると小回りになる
左前 //右モーターだけOFF
}
}
◆新しい機能、タイマー繰り返すを使う
タイマー繰り返す(n){・・・}を使うとPWM制御に時間を設定できます。
タイマー繰り返す(n){・・・} n x 0.1秒の間、{..}内を繰り返す 注、{..}内の命令は時間のかかるものは不可
//タイマー繰り返すを使った例
タイマー繰り返す(20){ //前進2秒
前進
}
タイマー繰り返す(20){ //ゆっくり前進2秒
繰り返す(10){
前進
}
繰り返す(2){
停止
}
}
タイマー繰り返す(20){ //右大回り2秒
繰り返す(10){
前進
}
繰り返す(2){
左前
}
}
タイマー繰り返す(20){ //左大回り2秒
繰り返す(10){
前進
}
繰り返す(2){
右前
}
}
//LEDの明るさを3段階に変える
タイマー繰り返す(20){ //デューティ比10%の明るさ
繰り返す(2){
両点灯
}
繰り返す(18){
消灯
}
}
タイマー繰り返す(20){ //デューティ比50%の明るさ
繰り返す(10){
両点灯
}
繰り返す(10){
消灯
}
}
タイマー繰り返す(20){ //デューティ比90%の明るさ
繰り返す(18){
両点灯
}
繰り返す(2){
消灯
}
}
◆Aレジスタ
MYUロボ-II基板はマイクロコンピュターを搭載しています。この中のAレジスタは、1バイトの値(0-255)を記憶でき計算や数の比較などができます。
Aレジスタは命令の引数に使えます。Aレジスタの値によって動きを変えることができます。
また、アナログ計測の値をAレジスタに読み込むことができ応用範囲が広がります。
繰り返す(A 比較 n){..} //Aレジスタと n を比較、条件が成り立つ間、{..}内を繰り返し実行
※比較式は以下の4つあります。
(A = n):Aレジスタの値とnが同じ場合、{..}内を実行
(A <> n):Aレジスタの値とnが異なる場合、{..}内を実行
(A > n):Aレジスタの値がnより大きい同じ場合、{..}内を実行
(A < n):Aレジスタの値がnより小さい同じ場合、{..}内を実行
下の例1は前進の引数にAレジスタを使っています。Aレジスタの値を1から2つづ増やし前進する時間が変化するプログラムとなっています。
命令ボックスの"繰り返す(){}"をドラックすると右のダイヤログが現れます。
(A < n)にチェックを入れ、Aレジスタと比較する数に16を入力、OKボタンを押し下のようにします。
//例1−1:多角形渦巻き旋回
A,1 //Aレジスタに1をセット
繰り返す(A < 16){ //Aレジスタが16より小さい間、{..}内を繰り返す
前進,A //前進の時間がAレジスタの値によって変化する
右回り,5
加える,2 //Aレジスタに2を加える
}
ブザー,2 //ブザーを鳴らして終了
|
|
もし(A 比較 n){..} //Aレジスタと n 比較して条件が成り立てば、{..}内を実行
繰り返し脱出 //繰り返す{..} から抜け出し次の命令を実行する
下は、'もし(A 比較 n){..}'と'繰り返し脱出'命令を使った例です。同じ動作をします。
//例1−2:多角形渦巻き旋回
A,1 //Aレジスタに1をセット
繰り返す{
前進,A //前進の時間がAレジスタの値によって変化する
右回り,5
加える,2 //Aレジスタに2を加える
もし(A > 15){ //Aレジスタが15より大きくなったら、{..}内を実行
繰り返し脱出
}
}
ブザー,2
◆Aレジスタを使うときの注意
Aレジスタで扱う値は0〜255までの整数値ですので以下の注意が必要です。
※(A < 0)や(A > 255)の比較式の条件は成り立ちません。
※Aレジスタの値が255の時、1加えると0になります。同様に0の時、1引くと255になります。
◆Aレジスタ以外のレジスタ
IXレジスタ:インデックスレジスタ 0-127までの値をセットし、IXMレジスタの位置を指定する
IXMレジスタ:インデックスメモリ IXの値(0-127)によって格納される128個のレジスタメモリ
PAレジスタ:ポートAの値がセットされる。
PBレジスタ:ポートBの値がセットされる。
PCレジスタ:ポートCの値がセットされる。
T0LとT0Hレジスタ:タイマー0(250KHz)の下位8ビットと上位8ビットがセットされる。
AHレジスタ:16ビット演算の時、Aレジスタが下位8ビット、AHレジスタが上位8ビットとなる。
ARG1とARG2レジスタ:16ビット演算時使う他、CMD命令の引数となる。
EEPROM:電源を切っても覚えている256バイトのメモリ
※16ビット演算は符号付き整数(+32,767〜-32,768)のかけ算、わり算ができます。
◆レジスタ命令
よく使うレジスタ命令です。※扱う値は、8bit幅です。(0〜255の整数値)
| 命令 |
説明 |
例 |
| A,n |
Aレジスタにnをセットします |
A,10 |
| 加える,n |
Aレジスタの値とnを加え、Aレジスタの値とします |
加える,10 |
| 引く,n |
Aレジスタの値からnを引き、Aレジスタの値とします |
引く,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 |
| クリアA |
Aレジスタの値を0にします |
クリアA |
| 増やす1 |
Aレジスタの値を1増やします |
増やす1 |
| 減らす1 |
Aレジスタの値を1減らします |
減らす1 |
| AN,n |
AN番号nのアナログ値をAレジスタにセットします |
AN,10 |
| 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 |
| RDEEPROM |
ARG1にセットされたEPROMアドレスの値を読みAレジスタにセットする |
RDEEPROM |
| WTEEPROM |
Aレジスタの値をARG1にセットされたEPROMアドレスに書き込む |
WTEEPROM |
◆モーターのノイズについて
MYUロボ-II基板は48MHzと高速で動作していますのでモーターを動かすとノイズの影響を受けやすくなります。
モーターの端子に1000pFぐらいのセラミックコンデンサーをハンダ付けするとよいでしょう。
◆パワーオンスタートについて
パワーオンスタート命令がプログラムの先頭に入っていると基板のスイッチONとともにプログラムがスタートします。この状態で新しいプログラムを転送するには、一旦スイッチを切り、転送ケーブルを接続してから基盤のタクトスイッチを押したまま基盤のスイッチを入れれば新しいプログラムを転送できます。
◆MYUロボ-IIエラーについて
myuusb.exeでは転送ボタンを押した時、エラーチェックを行います。
文法エラーがあった場合、ダイヤログが現れエラー部分が表示され転送は中止されます。
◆MYUロボ-II制御基板のエラーについて
MYUロボ-II制御基板は深さ16レベル以上のサブプログラム呼び出しやIXを128以上にセットしIXMを使うとエラーとなり警告音を鳴らし続けます。
また電池の電圧が下がると転送エラーが起こり警告音を鳴らし続けることがあります。
※エラーの場合は一旦電源を切りプログラムを修正したり電池をかえたりして再転送してください。
【計測と制御】
触覚は入力がある、ないというデジタル入力ですが、MYU-536 MYUロボ-II基板に光センサー(CDS)と抵抗(両方で100円程度)をハンダ付けするとアナログ計測が可能になります。
アナログ入力は明るさを 0-255 の値で判断するので計測と制御がより理解できるようになります。
●MYU-537 MYUロボ-II(CDS光センサー付) 3,186円(8%税込) は、最初からCDSがハンダ付けされています。
《デジタル入力表示とアナログ計測値》
基板とPCを転送ケーブルで接続、MYUロボ-II転送ソフトの右下に計測結果が表示されます。光センサー(CDS)にあたる光を遮ってみてください。アナログ計測値(0-255)が変化します。デジタル入力ではIn4部分が○から●となります。アナログ計測値は、制御プログラムのしきい値の参考にできます。

◆デジタル入力とアナログ入力の違い
デジタル入力のプログラムでは、入力あり、入力なしで判断しますので、光センサー(CDS)の場合、明るさのしきい値をプログラム側で設定できません。
アナログ入力を使えば、計測したアナログ値(Aレジスタ)によってしきい値を判断し、細かい制御が可能になります。
※光センサー(CDS)は、デジタルポート番号は 4 (In4) に、アナログポート番号は 10 (AN10) に接続されます。
●アナログ入力
アナログ入力はAN命令を使います。CDSはアナログポート番号 10 (AN10)に接続されています。
※光センサー(CDS)をアナログ計測した場合、値は明るいと小さく、暗くなると大きくなります。
AN , p //アナログポート番号 p (10)のアナログ計測値をAレジスタにセットします
アナログ計測値は、制御命令の"もし(A 比較 n){..}" を使ってしきい値を設定します。
※しきい値とは、その値を境に判定などが変わる値のことです。
もし(A 比較 n){..} //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 > n)にチェックを入れ、Aレジスタと比較する数に100を入力、OKボタンを押し下のようにします。
下は、CDS(In4)が暗くなるとLED消灯&ブザーが鳴り、明るいとLED点灯するプログラムです。
基板とPCを転送ケーブルで接続しアナログ値を計測します。アナログ入力の場合、その計測値を参考にしきい値nを変えることによって明るい部屋でも暗い部屋でも反応するプログラムが作れます。
//アナログ入力を使った例
繰り返す{
AN,10 //AN10のアナログ値(明るさ)を、Aレジスタにセット
もし(A > 100){ //CDS(In4)が暗くなると{・・}内を実行
消灯
ブザー,1 //ブザーを0.1秒鳴らす
}
そうでなければ{
両点灯
}
}
|
//デジタル入力を使った例を使った例
繰り返す{
入力なし(4){ //CDS(In4)が暗くなると{・・}内を実行
消灯
ブザー,1 //ブザーを0.1秒鳴らす
}
そうでなければ{
両点灯
}
}
|
下は制御命令の"そうでなければ(A 比較 n){..}"や"そうでなければ{..}"を使った例です。
明るい場所では前進、CDSに手をかざすと停止、更に暗くすると後退します。
//一定の明るさで停止するロボット
繰り返す{
AN,10 //AN10のアナログ値(明るさ)を、Aレジスタにセット
もし(A < 100){ //明るい場合は前進(Aレジスタ値:0-99)
前進
}
そうでなければ(A < 150){ //一定の明るさで停止(Aレジスタ値:100-149)
停止
}
そうでなければ{ //暗い場合は後退(Aレジスタ値:150-255)
後退
}
}
アナログ計測値を電子音命令の引数に使った例です。
CDSに手をかざすと音の高さが変化します。
//明るさによって音の高さを変える
繰り返す{
AN,10 //AN10のアナログ値(明るさ)を計測、Aレジスタにセット
電子音,1,A //Aレジスタの音を0.1秒ならす
}
|