先日は

 

 

にて、簡単な処理を実装して、HEXファイルをダウンロードしてみました。

 

 プログラミング言語を使用してコードを書く際には、

 

 ■ 内部処理

 ■ I/Oデバイスの制御

 
が入りますが、操作している人の目に見えない演算処理のような内部処理だけでなく、操作している人の作業に関係する処理も実装する必要があります。そのため、ハードウェアに対する入出力についても考える必要が出てくるわけですが、このにゅうsy通力のデバイスの状態で操作方法なども変わってきます。
 
 micro:bitはボタン操作をしようと思うと2つしか無いので、センサーなどと組み合わせて使う事になりそうですが、表示については、5x5のドットマトリックスLEDを使う事になります。
 
 サウンドもスピーカーがついており音のコントロールの出来るブロックもあるので、音の調整もできます。
 
 micro:bitでは、この実装された機能を使って操作できるものを作ることになります。
 
 ただし、これは、拡張していない状態なので、マイコンと同じようにGPIOを使ったシリアル通信にも対応しているので、そうした機能を使用してブレッドボード上に展開したパーツを使うと更に複雑な処理が出来るようになります。
 
 コードを買う際には仕様があるので、同じことをしようと思ってもプログラミング言語によって記述が異なりますが、同じ言語でもコンソールアプリとフォームアプリではコードの記述や処理の考え方が異なります。
 
 例えば、 【 Hello,World! 】 の表示をするコードを書くにしてもについてもプログラミング言語でコードの記述が異なります。例えば、BASICだと

 

 

 

のような感じで、画面の初期化をしてからPRINT文で表示が出来ますが、Python 3.x系だと

 

 

のように関数で表示をします。C言語だとI/Oの制御をするライブラリを読み込む必要があるので、stdio.hと言うヘッダーファイrを読み込んでmain関数の中に処理を実装する必要があるので、

 

 

 

のようなコードを書いて、その後コンパイルをして実行すr事になります。そのため、

 

 

 

 

のような状態になります。

 

 このように同じことをする場合でも、プログラミング言語で処理の方法が異なるのですが、micro:bitで動作を実装する場合、
 
 ■ 永続処理
 ■ 操作によって発生する処理
 ■ センサー検知で動作する処理
 
のようになにかの条件で動いたり常に動く状態にする必要があります。基本亭にマイコンは、ハードウェアの操作をするものなので、OSを載せて動かす場合もある(この時にリアルタイムOSを実装します。)のですが、白物家電とかリモコンとか周辺機器の場合、PCのような汎用OSは必要ありませんから、プログラムがそのまま実行される常態か、もしくは、リアルタイムOSなどを使う事になります。この分野だと前の世紀にはTORONがありましたが、現在もマイコンではリアルタイムOSを使った制御がされていますから、いろいろな選択肢が存在しています。
 
 個人が購入してくるチップについても現在は、リアルタイムOSの実装も可能ですが、ホビーユースの場合だと、コードをそのまま実行するような構造になるようにファームウェアをインストール後にスケッチを使って制御するような流れになっています。
 
 micro:bitもスケッチを追加して動かすような流れになっているのですが、周辺機器として缶が多彩にどういった処理を実装するのかを考えることになりますが、その時の入出力がどういった形で生じるのかで作り方が変わってきます。
 
 検知で動くという条件にする場合だと、

 

のような処理の塊になっているので、この中に処理を実装することになりますが、

 

 

のように最初に実行するだけのものと、処理を永続させるものがあるので、こうしたブロックの中に処理を包含する必要があります。その上で実行をすると、

 

 

のシミュレーター上で動作するようになります。先日は簡単なプログラムも作ってみたのですが、micro:bitではLEDの点灯もブロック一つで行えます。

 

 

 

のブロックで

 

 ■ 任意のパターン

 ■ アイコン

 ■ 文字列

 

を指定できますが、MakeCodeでは実行不能な状態の場所はがぞうのように色がない状態で表示されます。なので、コードとして実行不能な状態になっている場所は、視覚的に確認できるようになっています。これをボタンのイベントハンドラに格納すると、

 

のようになります。この幼児実行できる状態にすると色が付くのですが、ボタンの重複があると、片方は実行不能になりますから先に指定されていたほうが優先されて、もう片方は実行不能の表示になります。

 

 ブロックの操作ですが、

 

 ■ CTRL + C : コピー

 ■ CTRL + V : 貼り付け(ペースト)

 ■ CTRL + X : 削除

 

のようにOSの操作と同じ方法で複製と削除が出来ます。ちなみに、

 

のようにパターンを指定して実行してみると、

 

 

のようになります。マウスだと同時押しが出来ないので、同時押し用のボタンが増えるので実際に確認することが出来るのですが、別の機能についても動作確認が出来るようにMakeCodeのシミュレーターに確認用のUIが追加されるようになっています。

 

 これが、マイコンを導入した際に最初に行うLEDの点灯とプログラミング言語の最初に行う 【 Hello,World! 】 の表示になりますが、MakeCodeでのプログラミングの場合、イベントハンドラも使えるので、ずっとではなく、ボタンなどの動作で動くようにすることで、 【 操作と動作を連動させる 】 事が出来ます。

 

 ちなみに、この処理では初期化をしていないので画面の消去を入れていないので、パターンとアイコンについては、表示が維持されますが、文字列については、スクロールアウト後に全てのLEDが消えます。

 

 表示については、 【 文字列 】 の指定をすると、電光掲示板のように横に文字が流れていくので特別な処理をしなくてもその設定が最初から行わrてていますが、パターンを作ってスクロールするように発光の制御をする場合には、ブロックを作って処理を実装する必要があります。

 

 マイコンを使う場合、Arduino IDEなどを使ってコードを書くことになりますが、MakeCodeやM5Stackはブロックを使ったプログラミングが出来るようになっています。ただし、Arduino IDEでのコーディングが出来ないというわけではなく、それでも作業が行えるのですが、ブロック型の言語での開発も出来るようになっています。

 

 ブロックで処理を作った後は、

 

 

でダウンロードすることになりますが、ボタンをクリックすると

 

 

のようなウインドウが出ますが、繋がっていない場合だとLinuxでは

 

 

のようなファイルの保存になり、

 

 

のようにPCのストレージにファイルが保存されました。右側にある

 

 

のアイコンをクリックすると、

 

 

のようにGitHubにプロジェクトをアップロードすることが出来るようになっています。

 

 

  条件分岐

 

 処理を行う際には、分岐が生じることがありましが、この分岐は条件によって処理が異なる場合に使用するので 【 条件分岐 】 とも言います。この条件分岐はプログラミング言語だと 【 if 】 を使用しますが、この判定方法はブール代数でも使用します。ブール代数では、ここに論理演算が含まれるのですが、この論理演算を電気に対して利用しても成立するので、ド・モルガンの法則が成立しているわけです。

 ド・モルガンの法則では、AND/OR/NOTがあれば全ての判定を作れる事が証明されているわけですが、コンピューターで使用されている論理ゲートはNANDが基準になっているので、NANDゲートをCMOSで構成して少電力で動作するNANDの構成を使って基本となる論理ゲートが生成されています。NANDの場合、

【 NOTゲート 】
  ■ NANDの入力を統合して、AND要素をなくす

【 ANDゲート 】
  ■ NANDの出力をNOTで反転

【 ORゲート 】
  ■ NANDの入力をNOTで反転

することで基本となる3つの回路を作ることが出来ます。この構造も日の入力をするものから構成できるので半導体を用意することで構築できるわけですが、回路内での判定を行うパーツを作る際にはトランジスタを用いて処理をすることになります。論理ゲートは、

  ■ 直列回路 : ANDゲート
  ■ 並列回路 : ORゲート

になるので、この判定部分にトランジスタを実装するとこの構造に出来るのですが、この判定を行う物を手作業で実装する場合にはスイッチを実装することになります。

 その為、中学校の物理のオームの法則のカリキュラムで登場する直列回路と並列回路の抵抗部分をスイッチに入れ替えて、抵抗と不極の間に豆電球を入れた回路を作って、スイッチのオンとオフの状態と豆電t級の点灯の関係性を心理地表を書いて確認してみるとこの2つの心理値表の結果は論理積と論理和と全く同じ状態になります。

 コレと全く同じことを、小学校の理科では、直流と交流のカリキュラムで行っているわけですが、このカリキュラムでは、スイッチの役割を電池が担っているので、電池の有無と電球の点灯の心理値表を作ってみると、これも論理積と論理和と全く同じ結果になります。

 このことから、 【 スイッチ 】 = 【 条件分岐 】 と考えることが出来るわけです。日常生活でも電気を使うので、【 ON / OFF 】 の切り替えは行っているはずなんですが、この時の処理も二値の状態で結果が変わっているので条件分岐になります。

 小学校の理科では、これを複数使用することによって結果が変わることを学ぶことになりますが、この内容を見ると、義務教育のカリキュラムでは理科の分野でプログラミング言語で使用する

  ■ 条件分岐
  ■ 論理演算

を扱う物理モデルを使用していることになります。閉回路内に電池との豆電球を配置して、その間にスイッチを入れた場合、


【 通電 】━┳━【 オン 】━【 点灯 】
       ┃
       ┗━【 オフ 】━【 消灯 】


と言う形になるわけですが、これが、


 【 条件分岐 】━【 True 】 ━【 点灯 】
     ┃
     ┗━━━━ 【 False 】━【 消灯 】


の様な状態になっています。このように判定を入れることで、回路内の状態を変更することが出来るので、通電したらその状態が維持されたものとは異なる挙動を実装できるわけですが。この場合、回路内で指定した工程に基づく処理の実行ではなく 【 入力の変化 】 のような 【 特定の条件 】 で変化するものを使用することになります。

 プログラミング言語では、これを 【 変数の値 】 などを基準にして判定が行えるようにifが実装されています。

 MakeCodeでも条件分岐のブロックが実装されており、それを使用することで判定を実装できるようになっています。
 
 

  判定を入れる

 条件分岐は、

 

 

のように判定によって結果が変わる処理になりますが、プログラミング言語だとifを使用します。このブロックについては、

 

 

 

のような形をしているので、この中に処理を実装する事になります。

 

 MakeCodeでは、



のような形で、一度だけ実行するものと、メインループに該当する物が用意されていますが、このループ内でなにかの判定を入れるときには条件分岐を実装することになります。

 
 メインループは内部の処理を無限ループで実行することになるので、この場所に表示を行う指定をすると、継続して表示が行われるようになります。MakeCodeで文字列の表示を指定すると、電光掲示板のように文字列がスクロールするように表示されるのですが、条件分岐についても判定を入れていない場合だとただの表示と同じなので、実装されたものがそのままヒョじされてしまいます。

 その為、



のような処理を実装すると画像が表示された後に文字列が表示されます。



 MakeCodeでの判定は六角形のブロック担っているのですが、ここで、入力の指定が出来るので、
 


のような判定を入れることも出来ます。コード自体は、
 
 
のようになりますが、この状態にすると、



が常に表示されており、



のようにロゴに触れると文字がヒョじされます。



そして、流れ終わると、判定が終了するので、ループ内の表示に戻ります。


 
 

  判定と処理


 MakeCodeでは、Scratchと同様にイベントハンドラを独立させておいて、イベント単位で管理が出来るのですが、その条件自体を判定の中で使用することが出来ます。イベントハンドラは、【 イベント発生時の処理 】 なので、ボタンを押した時の処理を実装するものになりますが、これは 【 動作の実装 】 ですから、判断を行うことは出来ません。

 その為、 【 特定の条件でボタンが押された場合 】 のような判定の実装をする場合には、イベントハンドラではなく、条件分岐を用いることになります。こうした判定をするためにMakeCodeでは入力に対する判定も用意されているので



のような構成にすることが出来ます。実行すると常に 【 でなければ 】 の条件が反映されるので、その画像が表示されるので、


が表示されます。ボタンが押されるとそれぞれの判定が行われるので


のようになります。分岐ですが、

 ■ 【+】 : 判定を増やす
 ■ 【ー】 : 判定を減らす

事が出来るので、 【 でなければ 】 も削除できるのですが、削除をするとメインループ内に指定された処理が常に行われるようになり、判定が発生したときのみ指定した処理が実行されるようになります。この場合、



のような形になりますが、常に実行される部分が、



の表示で、ボタンが押された時に個別の処理が生じるようになります。

 この構造では、

 ■ 表示
 ■ 条件分岐

と言う処理が格納されており、常に生じるのは表示でその後、条件分岐が発生するようになっていますが、この処理は個別に分けて考えることが出来ますから、2つの処理が1つのループ内に格納された構造になっています。