●LEDを使った計測と制御
■MYU-538 LED計測制御キット-II(LEDハンダ付けタイプ) 2,090円(10%税込)
■MYU-539 LED計測制御基板-II(LEDハンダ付け済み) 2,200円(10%税込)
■MYU-535 LED計測制御グループ学習セット(ハンダ付け済み) 2,585円(10%税込)
LED計測制御は、計測と制御の学習に最適です。簡単な操作(マウスと数字キー)だけでプログラムできます。日本語を使った命令や解りやすい制御文、簡単な操作による入力条件の設定など複雑な動作も簡単で解りやすいプログラムを作ることができます。
・光センサー(CDS)、USB転送ケーブル付き、メロディのプログラム可能
◆LED制御 ネットワークを利用した双方向性通信の解説はこちら
●LEDの制御ソフト
※LED用の制御ソフトは(myuled-II.zip) ここからダウンロード(V1.191 2021/3/1)できます。(64bitOS対応)
ダウンロードしたmyuled-II.zipを展開しmyuled-IIホルダをハードディスク・サーバーなどにコピーしてください。
ドライバなどをインストールする必要はありません。
●起動方法
ホルダ中のmyuled-II.EXE(青色のアイコン)を実行するとMYULEDーII転送ソフトが起動します。
※Windows によって PC が保護されました-このメッセージが出る場合は、詳細情報をクリック、実行をクリックして実行すれば次回から問題なく
実行できます。
●マウスと数字キーだけでプログラム
LEDのプログラムでは、右図のように光らせたいLEDにチェックを入れ時間をセットして完了です。
音楽のプログラムも音階または休符を押し時間をセットしてOKボタンを押すだけです。


●LEDのリモート制御やリアルタイム計測(右図参照)
MYULED-II.EXEを立ち上げ、基板とPCを転送ケーブルで接続するとリモート制御やリアルタイム計測が出来ます。
ソフト右下P7からP0までにチェックを入れると対応したLEDを光らすことができます。(ポート出力)
光センサー(CDS)にあたる光を遮ってみてください。アナログ計測値が変化します。デジタル入力ではIn2部分が○から●となります。
アナログ入力は明るさによって値が0-255に変化しますが、デジタル入力の場合、明るいか暗いかだけの判断となります。
※光センサー(CDS)は、デジタル入力ではIn2に接続されています。
●キーボードを使った操作
音楽ボタンを押すとキーボードが現れパソコン側から演奏出来ます。
●MYU-LED転送ソフト (myuled.exe) テキストによるブロックプログラム
MYULED-II.EXE(青いアイコン)を使ってLEDのプログラムを説明します。MYULED-II.EXEを立ち上げ、開くボタンを押してLEDサンプル1.txtを読み込んでください。PCと基板とを転送ケーブルで接続し転送ボタンを押し、転送しますか?<はい>で転送され'ピピ'と鳴り転送終了です。転送ケーブルを抜きタクトスイッチを押すとプログラムが実行されます。
プログラムは、マウスを使って命令を編集ボックスに部品を配置するようにして作ります。

編集ボックス
LEDの制御プログラムを編集する場所です。命令リストから命令をドロップしたり行をドラックして入替えたりできます。
命令タブ(MYUロボ命令と制御命令)
LEDの制御で使われる命令リストです。命令はMYUロボ命令と制御命令に分かれています。タブをクリックして切り替えます。
命令をクリックすると解説ボックスにその命令の説明が表示されます。
命令をダブルクリックやドラッグすると編集ボックスに反映されLEDの制御プログラムを作っていくことができます。
よく使う命令を上にドラッグして移動することや右クリックで新しい命令を追加するなどの機能もあります。
解説ボックス
命令リスト内の命令をクリックすると命令の解説が表示されます。
USB-●
基板と接続されているか表示します。
読込ボタン
基板に書き込まれている制御プログラムを読み込み編集ボックスに表示します。
開くボタン
保存された制御プログラムを読み込み編集ボックスに表示します。拡張子は.txt
保存ボタン
編集ボックスの制御プログラムを保存します。拡張子は.txt
クリアボタン
編集ボックス内をクリアします。
転送ボタン
編集ボックス内の制御プログラムを基板に転送します。
音楽ボタン
基盤をつないだまま、キーボードを使って音を鳴らすことができます。
リモート
ドロップダウンリストで選んだ命令を隣のボタンでリモート操作できる
◆命令のカスタマイズ
startupusb.iniを編集すると命令をカスタマイズすることができます。
●LEDの制御プログラム
myuled-II.exe(青いアイコン)を立ち上げMYUロボ命令の"ポート出力"をクリックしてください。下の解説ボックスに説明が表示されます。
続けて"ポート出力"をドラッグ(左ボタンを押したまま)して編集ボックスにドロップしてください。右の引数入力用ダイアログが現れます。
引数1に"10"と入力し改行キーを押し、引数2を右図のようにチェックを入れOKボタンを押します。編集ボックスには下のように表示されます。
※ボックス内の命令をダブルクリックしても同じことができます。
※B'01010101' は2進数の入力方式です。8個のLEDを1と0で指定して光らせます。
※編集ボックス内の命令をダブルクリックしても値を変更できます。
ポート出力,10,B'01010101'
プログラムはこのようにして作っていきます。MYU-LED-II転送ソフトは最初に命令、コンマ、引数の順で書いていきます。命令には引数のないもの、引数が1つのもの、引数が2つのものがあります。詳しくはこちらをご覧ください。
※命令には、MYUロボ命令と制御命令とがあります。制御命令タブをクリックすると制御命令に切り替わります。
このプログラムの動作はLEDを1個おき1秒間光らせるものです。次にパソコンと基板とを転送ケーブルで接続し、転送ボタンを押し<はい>で転送されます。'ピピ'と鳴れば転送終了です。転送ケーブルを抜きタクトスイッチを押すとプログラムが実行されます。
プログラムは編集ボックスに直接書いても同じ結果となります。コンマや引数は全角文字も使えます。
転送されたプログラムは電源を切っても覚えています。スイッチを入れタクトスイッチを押すと何回でも実行できます。
●ポート出力命令
LEDのプログラムはポート出力命令を使います。ICのポートCにデータを出力することによってLEDを点灯させます。
命令の引数は2進数を使うと便利です。
ポート出力,m,n //第1引数m(0-255)x0.1秒だけ 第2引数のデータn(0-255)をポートに出力する (MYU-LED-II転送ソフト)
ポート出力,10,B'01010101' //LEDを1個おきに1秒光らせる。 LEDは、○●○●○●○● のように光ます。
下は応用例です。LEDの光が左に流れるプログラムです。
//LEDの光が0.1秒間隔で左に流れる
ポート出力,1,B'00000001'
ポート出力,1,B'00000010'
ポート出力,1,B'00000100'
ポート出力,1,B'00001000'
ポート出力,1,B'00010000'
ポート出力,1,B'00100000'
ポート出力,1,B'01000000'
ポート出力,1,B'10000000'
◆マウス(ドラッグ&ドロップ)を使ったプログラム編集
命令をマウスで横に移動すると文字が反転しブロックごと移動できます。命令リストから命令を編集ボックスに配置したり、命令の順番を入れ替えたり、マウスだけで簡単にプログラムを作ることができます。(テキストによるブロックプログラム)
※命令をダブルクリックすると引数も簡単に変更できます。
※ドロッグしたブロックを枠外に移動するとブロックごと削除できます。
※間違って削除した場合、Ctrl-Z(Ctrlキーを押したままZキーを押す)で元に戻ります。
※Ctrlキーを押したまま移動するとブロックをコピーします。
※Shiftキーを押したまま行をドラッグすると1行の移動ができます。
◆繰り返すプログラム
プログラムは命令を順に実行しますが、ジャンプ命令や制御命令はその流れを変えることができます。
以下、交互にLEDを0.1秒間隔で点滅させるプログラムです。基板に転送しタクトスイッチを押すと動作します。
アンカー,10 //アンカー番号10
ポート出力,1,B'01010101'
ポート出力,1,B'10101010'
ジャンプ,10 //アンカー番号10へジャンプ
※//以下は次の行までコメントが書けます。コメントを残しておくと後からプログラムの内容が理解しやすくなります。
アンカー,n //アンカー番号(1から127) n を宣言する(MYU-LED転送ソフト)
ジャンプ,n //アンカー番号 n にジャンプする(MYU-LED転送ソフト)
◆アンカーとジャンプ(MYU-LED転送ソフト)
プログラムは命令を順に実行しますが、ジャンプ命令はその流れを変えることができます。ジャンプ命令は引数と同じアンカー番号の所へジャンプします。
上の例ではLEDを交互に光らせます。
※アンカーは番号(1から127)を宣言するだけでなにも実行しません。
※アンカー番号の重複(同じアンカー番号を付けること)は禁止です。
※上のように繰り返すプログラムをループプログラムと呼びます。またアンカーとジャンプの間の命令は段落をつけると見やすくなります。保存ボタンを押してファイル名を指定し保存するようにしてください。
※MYUROBOファイルの拡張子は'.txt'ですのでWINDOWSのメモ帳でもプログラムを編集できます。
◆制御命令(MYU-LED転送ソフト)
ジャンプ命令は番号を使うので複雑なプログラムでは解りにくくなってしまいます。
制御命令を使うと複雑な動作も簡単で解りやすいプログラムを書く事ができます。下は上のプログラムを制御命令を使って書いた例です。
繰り返す{..} //{..}内を無限に繰り返し実行する
繰り返す(n){..} //{..}内を n 回繰り返す
制御命令を使うには、制御命令タブをクリック、制御命令に切り替えます。命令リスト内の"繰り返す{..}"をドラックして編集ボックスに配置し下のようにします。
//制御命令を使った例
繰り返す{
ポート出力,1,B'01010101'
ポート出力,1,B'10101010'
}
|
//ジャンプ命令を使った例
アンカー,10 //アンカー番号10
ポート出力,1,B'01010101'
ポート出力,1,B'10101010'
ジャンプ,10 //アンカー番号10へジャンプ
|
◆制御命令{..}について
制御命令{..}は入れ子構造といって内部にいくつもの制御命令{..}を書くことができます。"{"と"}"はセットになっていて内側の制御命令{..}と区別します。
{..}は全角文字の{..}、「..」、【..】なども使えます。
下のプログラムは{・・}内を2回づつ繰り返しますので次の順に命令は実行されます。
命令1→命令2→命令3→命令3→命令4→命令2→命令3→命令3→命令4→命令5
命令1
繰り返す(2){
命令2
繰り返す(2){
命令3
}
命令4
}
命令5
|
←←
↑
← ↑
↑↑
→ ↑
↑
→→
|
※外側の{・・・}と、内側の{・・・}と区別してプログラムの流れを考えます。
応用例でLEDの光が左に流れるプログラムです。他のシフトパターンも試してください。
//LEDの光が0.1秒間隔で左に流れる(MYU-LED転送ソフト)
繰り返す{
ポート出力,1,B'00000001'
ポート出力,1,B'00000010'
ポート出力,1,B'00000100'
ポート出力,1,B'00001000'
ポート出力,1,B'00010000'
ポート出力,1,B'00100000'
ポート出力,1,B'01000000'
ポート出力,1,B'10000000'
}
◆PC(ポートC)命令を使う (LEDを光らせながら音を出す)
PC命令を使ってもLEDを光らせることができます。PC命令を使うとLEDとブザーやメロディのプログラムが可能になります。
PC,n //ポートCにn(0-255)を出力
ブザー,n //n x0.1秒の間 ブザーを鳴らす
PC命令は時間が設定できません。PC命令の後にブザー命令で時間を設定するとLEDを光らせながらブザーを鳴らすことができます。
下はPC命令とブザー命令を使って警告音を鳴らすプログラム例です。音楽を使うとメロディを鳴らすことができます
//LEDを1つおき0.1秒間隔で交互に光らせ警告音を鳴らす(MYU-LED転送ソフト)
繰り返す{
PC,B'01010101'
ブザー,1 //ブザーを0.1秒ならす
ポート出力,1,B'10101010' //0.1秒間ポートCにB'10101010'を出力
}
●音楽のプログラム
音楽,m,n //第1引数m(0-255)x0.1秒だけ 第2引数n(1-255)パルス幅の音を鳴らす (転送ソフト)
命令ボック内の音楽命令をダブルクリックまたは、ドラッグすると下のダイアログが現れ休符を含めたプログラムが可能になります。
※音階ボタンまたは休符を押し時間を設定してOKボタンを押します。

下の例は、PC命令と音楽命令を使って「ドレミ」を繰り返し演奏するプログラムです。
//「ドレミ」を繰り返し演奏(転送ソフト)
繰り返す{
PC,B'00000001' //ポートCにB'00000001'を出力
音楽,5,80 //「ド」の音をを0.5秒ならす
PC,B'00000011' //ポートCにB'00000011'を出力
音楽,5,71 //「レ」の音をを0.5秒ならす
PC,B'00000111' //ポートCにB'00000111'を出力
音楽,5,63 //「ミ」の音をを0.5秒ならす
ポート出力,5,B'00001111' //ポートCにB'0000111'を出力
}
◆制御命令一覧
制御命令 |
説明 |
繰り返す{・・・.} |
{・・・.}内を繰り返し実行する。{・・・.}内から脱出するには'繰り返し脱出'命令を使う |
繰り返す(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)
●制御命令のフローチャート
◆Aレジスタ
MYULED-II基板はマイクロコンピュターを搭載しています。この中のAレジスタは、1バイトの値(0-255)を記憶でき計算や数の比較などができます。
Aレジスタは命令の引数に使えます。Aレジスタの値によって動きを変えることができます。
また、アナログ計測の値をAレジスタに読み込むことができ応用範囲が広がります。
下のプログラムは0.1秒ごとLEDの2進数を1づつ増やすというものです。Aレジスタの値を1づつ増やしポートCに出力しています。
//0.1秒ごとにポートCの値を1づつ増やす(MYU-LED転送ソフト) 繰り返す{ 加える,1 //Aレジスタの値に1を加える ポート出力,1,A //Aレジスタの値を0.1秒出力
}
※プログラム開始時、Aレジスタの値は 0 となっています。
//0.1秒ごと値を1づつ増し音の高さも変える(MYU-LED転送ソフト) 繰り返す{ 増やす1 //Aレジスタの値を1増やす PC,A //Aレジスタの値を出力
音楽,1,A //Aレジスタ幅の音を0.1秒出す
}
//左シフト回転(MYU-LED転送ソフト) A,B'11' //Aレジスタの値をB'11'(3)にする 繰り返す{ ポート出力,1,A //Aレジスタの値を0.1秒出力 左シフト //Aレジスタの値を左シフト回転
}
※CDSのアナログ計測、明るさによってLEDの光り方が変わります。
//CDSのアナログ計測値を2進数で表示(MYU-LED転送ソフト)
繰り返す{
アナログ計測
ポート出力,1,A //Aレジスタの値をポートCに0.1秒出力
}
※Aレジスタや変数で扱う値は0〜255までの整数値です。値が255の時、1加えると0になります。同様に0の時、1引くと255になります。
◆レジスタ命令
よく使うレジスタ命令です。※扱う値は、8bit幅です。(0〜255の整数値)
命令 |
説明 |
例 |
A,n |
Aレジスタにnをセットします |
A,10 |
加える,n |
Aレジスタの値とnを加え、Aレジスタの値とします |
加える,10 |
引く,n |
Aレジスタの値からnを引き、Aレジスタの値とします |
引く,10 |
クリアA |
Aレジスタの値を0にします |
クリアA |
増やす1 |
Aレジスタの値を1増やします |
増やす1 |
減らす1 |
Aレジスタの値を1減らします |
減らす1 |
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レジスタにセットします |
アナログ計測 |
PC,n |
PC(ポートC)にnを出力します |
PC,B'10101010' |
PBA |
PB(ポートB)の値をAレジスタにセットします |
PBA |
APC |
Aレジスタの値をPC(ポートC)に出力します |
APC |
左シフト |
Aレジスタの値をC(キャリー)ビットを含めて左シフト回転します(値が倍になる) |
左シフト |
右シフト |
Aレジスタの値をC(キャリー)ビットを含めて右シフト回転します(値が半分になる) |
右シフト |
◆MYUROBOエラーについて
myuled.exeでは転送ボタンを押した時、エラーチェックを行います。
文法エラーがあった場合、ダイヤログが現れエラー部分が表示され転送は中止されます。
◆MYULED-1基板のエラーについて
MYULED-1基板は深さ16レベル以上のサブプログラム呼び出しやIXを128以上にセットしIXMを使うとエラーとなり警告音を鳴らし続けます。
※エラーの場合は一旦電源を切りプログラムを修正してから再転送してください。
【入力ポートを使った計測と制御プログラム】
今までのプログラムは出力ポートの制御でした。ここからは入力ポートを使った計測と制御を学習します。
入力ポートにはデジタル入力とアナログ入力の2種類があります。
※この基板のデジタル入力ポートにはタクトスイッチ(In1)とCDS光センサー(In2)、出力ポートにはLEDが接続されています。
◆入力ポートによる制御命令1:入力あり(n){..}と入力なし(n){..} (MYU-LED転送ソフト)
入力あり(p){..} //デジタル入力ポート番号(1-2) p が入力ありなら{..}内を実行する、入力ない場合{..}の次を実行する
入力なし(p){..} //デジタル入力ポート番号(1-2) p が入力なしなら{..}内を実行する、入力ある場合{..}の次を実行する
そうでなければ{..} //入力ありや入力なしの条件が成立たない場合、{..}内を実行する
◆光センサー(CDS)
光センサー(CDS)はIn2に接続されています。下の例は、CDS(In2)にあたる光が明るいとLEDを点滅、暗いとブザー鳴らしします。
※光センサー(CDS)は、明るいと入力あり、暗いと入力なしとなります。
//明るいとLEDを点滅、暗いとブザー鳴らす(MYU-LED転送ソフト)
繰り返す{
ポート出力,1,B'01010101'
ポート出力,1,B'10101010'
入力なし(2){ //In2が暗くなったらブザーを鳴らす
ブザー,1
}
}
制御命令の"繰り返す"を編集ボックスにドラック、さらに"入力なし(){}"をドラックすると右のダイヤログが現れます。
In2(CDS光センサー)にチェックを入れOKボタンを押し下のようにします。
下は、'入力あり{..}'と'そうでなければ{..}'の制御命令を使った例です。同じ動作をします。
//明るいとLEDを点滅、暗いとブザー鳴らす(MYU-LED転送ソフト)
繰り返す{
入力あり(2){ //In2が明るい場合、{..}内を実行
ポート出力,1,B'01010101'
ポート出力,1,B'10101010'
}
そうでなければ{
ブザー,1
}
}
◆入力ポートによる制御命令2:入力あり繰り返す(n){..}と入力なし繰り返す(n){..}
入力あり繰り返す(n){..}と入力なし繰り返す(n){..}は条件ループ文です。入力ポートの条件が成りたつ間、{..}内のプログラムを繰り返し実行します。入力ポートの条件が成りたたなくなると{..}内から抜け次のプログラムを実行します。
入力あり繰り返す(p){..} //デジタル入力ポート番号(1-2) p が入力ありの間、{..}内を繰り返し実行、入力なしになると次の命令を実行
入力なし繰り返す(p){..} //デジタル入力ポート番号(1-2) p が入力なしの間、{..}内を繰り返し実行、入力ありになると次の命令を実行

制御命令用命令ボックス内の"入力あり繰り返す(){}"をドラックすると右のダイヤログが現れます。
In2(CDS光センサー)にチェックを入れOKボタンを押します。
条件ループ文を使っても上と同じ動作をするプログラムが作れます。
In4が入力あり(CDSが明るい)の間、{..}内を繰り返し実行、暗くなったら{..}を抜け次のブザー命令を実行します。
//明るいとLEDを点滅、暗いとブザー鳴らし終了(MYU-LED転送ソフト)
入力あり繰り返す(2){ //CDS(In2)が明るい間{・・}内を繰り返し実行
ポート出力,1,B'01010101'
ポート出力,1,B'10101010'
}
ブザー,1
【デジタル入力表示とアナログ計測値】
基板とPCを転送ケーブルで接続、MYU-LED転送ソフトの右下に計測結果が表示されます。光センサー(CDS)にあたる光を遮ってみてください。アナログ計測値(0-255)が変化します。デジタル入力ではIn4部分が○から●となります。アナログ計測値は、制御プログラムのしきい値の参考にできます。
◆デジタル入力とアナログ入力の違い
デジタル入力のプログラムでは、入力あり、入力なしで判断しますので、光センサー(CDS)の場合、明るさのしきい値をプログラム側で設定できません。
アナログ入力を使えば、計測したアナログ値(Aレジスタ)によってしきい値を判断し、細かい制御が可能になります。
●アナログ入力
アナログ入力はアナログ計測命令を使います。
※光センサー(CDS)をアナログ計測した場合、値は明るいと小さく、暗くなると大きくなります。
アナログ計測 //アナログ計測値をAレジスタにセット(MYU-LED転送ソフト)
アナログ計測値は、制御命令の"もし(A 比較 n){..}" を使ってしきい値を設定します。(MYU-LED転送ソフト)
アナログ入力の場合、しきい値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ボタンを押し下のようにします。
//明るいとLEDを点滅、暗いとブザー鳴らす(MYU-LED転送ソフト)
繰り返す{
ポート出力,1,B'01010101'
ポート出力,1,B'10101010'
アナログ計測 //CDSの計測値をAレジスタにセット
もし(A > 100){ //暗くなると{・・}内を実行
ブザー,1
}
}
下の例は、CDS(In4)にあたる光が明るいとLEDを点滅、暗いとブザー鳴らしプログラムが終了します。
※比較する数は、アナログ計測値を参考に設定します。
繰り返す(A 比較 n){..} //Aレジスタの値と n を比較して条件が成り立つ間、{..}内を繰り返し実行、成り立たない場合、次の命令を実行
"繰り返す(A 比較 n){..}"は、条件ループ文です。Aレジスタの値と n を比較して条件が成り立つ間、{..}内のプログラムを繰り返し実行します。
条件が成りたたなくなると{..}内から抜け次のプログラムを実行します。
制御命令用命令ボックス内の"繰り返す(){}"をドラックすると右のダイヤログが現れます。
(A < n)にチェックを入れ、Aレジスタと比較する数に100を入力、OKボタンを押し下のようにします。
//明るいとLEDを点滅、暗いとブザー鳴らし終了(MYU-LED転送ソフト)
アナログ計測
繰り返す(A < 100){ //明るい間{・・}内を繰り返し実行
ポート出力,1,B'01010101'
ポート出力,1,B'10101010'
アナログ計測 //{・・}内でアナログ計測命令を行う
}
ブザー,1
下は"繰り返す(A 比較 n){..}"を使った例です。上と同じ動作をします。
●アナログ計測値の2進数表示
下はアナログ計測値をポートCに出力したものです。アナログ計測値が2進数で表示されます。
※明るさによってLEDの光り方が変わります。
//CDSのアナログ計測値を2進数で表示(MYU-LED転送ソフト)
繰り返す{
アナログ計測
ポート出力,1,A //Aレジスタの値をポートCに0.1秒出力
}
●アナログ計測値のLED表示
2進数表示では解りにくいので改良したものです。しきい値を多数設定しLEDの光り方を変えています。
※制御命令の"そうでなければ(A 比較 n){..}"や"そうでなければ{..}"を使った例です。
//CDSのアナログ計測値をLEDの点灯数で表示(MYU-LED転送ソフト)
繰り返す{
アナログ計測
もし(A < 28){ //Aレジスタの値が28より小さい場合
PC,B'1111111'
}
そうでなければ(A < 57){ //Aレジスタの値が28-56の場合
PC,B'01111111'
}
そうでなければ(A < 85){ //Aレジスタの値が57-84の場合
PC,B'00111111'
}
そうでなければ(A < 114){ //Aレジスタの値が85-113の場合
PC,B'00011111'
}
そうでなければ(A < 142){ //Aレジスタの値が113-141の場合
PC,B'00001111'
}
そうでなければ(A < 171){ //Aレジスタの値が142-170の場合
PC,B'00000111'
}
そうでなければ(A < 199){ //Aレジスタの値が171-198の場合
PC,B'000000011'
}
そうでなければ(A < 228){ //Aレジスタの値が199-227の場合
PC,B'000000001'
}
そうでなければ{ //Aレジスタの値が228-255の場合
PC,B'00000000'
}
}
●PWM制御(LEDの明るさを変える)
PWM制御は、右図のようにモーターのON,OFFの時間(デューティ比)を変えることでモーターの電圧をコントロールする方法です。
例えば電圧が3V、ONの時間が2、OFFの時間が1とするとモーターは 3V x デューティ比(2/3) = 2Vの電圧で駆動することになります。
これを利用すればLEDの明るさ変えることができます。
//CDSのアナログ計測値によってLEDの明るさを変える(MYU-LED転送ソフト)
繰り返す{
アナログ計測 //CDSの計測値をAレジスタにセット
繰り返す(A > 40){ //Aレジスタの値により繰返す回数を変える
PC,B'11111111' //LEDを8個点灯
DECA //Aレジスタの値を1減らす
} //繰返す回数が多いと明るい時間が長くなる
アナログ計測 //CDSの計測値をAレジスタにセット
繰り返す(A < 250){ //Aレジスタの値により繰返す回数を変える
PC,B'00000000' //LEDを8個消灯
INCA //Aレジスタの値を1増やす
} //繰返す回数が多いと暗い時間が長くなる
}
//LEDの明るさを3段階に変える(MYU-LED転送ソフト)
繰り返す(250){ //デューティ比10%の明るさ
繰り返す(20){
PC,B'11111111'
}
繰り返す(180){
PC,B'00000000'
}
}
繰り返す(250){ //デューティ比50%の明るさ
繰り返す(100){
PC,B'11111111'
}
繰り返す(100){
PC,B'00000000'
}
}
繰り返す(250){ //デューティ比90%の明るさ
繰り返す(180){
PC,B'11111111'
}
繰り返す(20){
PC,B'00000000'
}
}
◆サブプログラム
プログラムで何回も同じ処理をすることがあります。この部分をサブプログラムとしてメインプログラムとは別に作っておくとプログラムが見やすくコンパクトになります。
MYU-LED転送ソフトでは"サブプログラム サブプログラム名"に続き{..}内にプログラムを書きます。
サブプログラムはそのままではなにも動作しません。メインプログラムやサブプログラム内でサブプログラム名を使うことで呼び出され処理の終わりとともに呼ばれた場所に戻ります。
命令ボックスの"サブプログラム{}"をドラックすると右のダイヤログが現れサブプログラム名を入力します。
//サブプログラム使用例(MYU-LED転送ソフト)
繰り返す{
警告音
警告音
シフト左
警告音
警告音
シフト右
} //ここまでがメインプログラム
サブプログラム シフト左{
ポート出力,1,B'00000001'
ポート出力,1,B'00000010'
ポート出力,1,B'00000100'
ポート出力,1,B'00001000'
ポート出力,1,B'00010000'
ポート出力,1,B'00100000'
ポート出力,1,B'01000000'
ポート出力,1,B'10000000'
}
サブプログラム シフト右{
ポート出力,1,B'10000000'
ポート出力,1,B'01000000'
ポート出力,1,B'00100000'
ポート出力,1,B'00010000'
ポート出力,1,B'00001000'
ポート出力,1,B'00000100'
ポート出力,1,B'00000010'
ポート出力,1,B'00000001'
}
サブプログラム 警告音{
PC,B'01010101' //ポートCにB'01010101'を出力
ブザー,1 //ブザーを0.1秒ならす
ポート出力,1,B'10101010' //0.1秒間ポートCにB'10101010'を出力
}
※サブプログラム名は数字以外で始まり半角アルファベット、全角文字、数字が使えます。
※サブプログラムはどこに在ってかまいませんがプログラムの見やすさを考えるとメインプログラムの後ろに置いた方が良いでしょう。
※戻る命令を使うとサブプログラムの途中から戻れます。
●キッチンタイマー
一定時間の後、警告音を鳴らすプログラムです。
編集ボックスをクリア、"繰り返す(){}"をドラックすると右のダイヤログが現れ繰り返すの回数を入力します。
※制御命令の"繰り返す(n){..}" は{..}内を n回繰り返かえします。繰り返かえしを終了すると次の命令を実行します。
※繰り返しの回数を指定することで大きな時間が設定できます。
//30秒後、警告音を鳴らす(MYU-LED転送ソフト)
繰り返す(30){ //( )内の数字x1秒待ち(30秒待ち)
待つ,10 //1秒の待ち
}
繰り返す{ //警告音
PC,B'01010101' //ポートCにB'01010101'を出力
ブザー,1 //ブザーを0.1秒ならす
ポート出力,1,B'10101010' //0.1秒間ポートCにB'10101010'を出力
}
●目覚ましタイマー
8時間15分後、警告音を鳴らすプログラムです。
//8時間15分後、警告音を鳴らす(MYU-LED転送ソフト)
繰り返す(8){ //()内の数字x時間タイマー(8時間待ち)
繰り返す(180){ //20x180=3600秒=1時間待ち
待つ,200 //20秒の待ち
}
}
繰り返す(45){ //20x45=900秒=15分待ち
待つ,200 //20秒の待ち
}
繰り返す{ //警告音
PC,B'01010101' //ポートCにB'01010101'を出力
ブザー,1 //ブザーを0.1秒ならす
ポート出力,1,B'10101010' //0.1秒間ポートCにB'10101010'を出力
}
サンプルプログラム1 (LEDサンプル)
タクトスイッチ(In1)を押すと左、離すと右へ移動点灯する。
//タクトスイッチ(In1)を押すと左へ離すと右へ移動
A,1 //Aレジスタに1をセット、値を変えるとシフトパターンが変わる
繰り返す{ //{..}内を繰り返す
APC //Aレジスタの値をポートCに出力
音楽,1,A //Aレジスタ幅の音を0.1秒鳴らす
入力あり(1){ //In1を押したら
左シフト //Aレジスタを左シフト
}
そうでなければ{
右シフト //Aレジスタを右シフト
}
}
サンプルプログラム2 (LEDサンプル)
//タクトスイッチを1回押すことに30秒づつキッチンタイマーの時間が増える
//0.5秒以上押すことでキッチンタイマーの時間をセット
//再度タクトスイッチを押すことで作動
//30秒ごとのキッチンタイマー(MYU-LED転送ソフト)
A,0 //Aレジストの値を0にする
入力あり繰り返す(1){ //タクトスッイチを離すのを待つ
}
繰り返す{
ブザー,1 //1回押すことに0.1秒ブザー
INCA //Aレジスタの値を1増やす
APC //Aレジスタの値をLEDに表示
入力なし繰り返す(1){ //タクトスッイチを押すのを待つ
}
待つ,5 //0.5秒待つ
入力あり(1){ //0.5秒以上押すと繰り返す脱出
繰り返し脱出
}
}
ブザー,10 //セットされると1秒ブザー
入力なし繰り返す(1){ //タクトスイッチを押すのを待つ
}
ブザー,1 //タイマー作動、0.1秒ブザー
繰り返す(A > 0){ //Aレジスタの値x30秒待ち
繰り返す(30){ //30秒のタイマー
待つ,10 //1秒の待ち
}
DECA //Aレジスタを1減らす
APC //Aレジスタの値をLEDに表示
}
繰り返す{ //警告音作動
PC,B'01010101' //ポートCにB'01010101'を出力
ブザー,1 //ブザーを0.1秒ならす
ポート出力,1,B'10101010' //0.1秒間ポートCにB'10101010'を出力
}
|