マイコンボードを学習するとき、まず始めにLEDを光らせてみる、という演習が定番です。「Lチカ」とは「LEDをチカチカさせる」の意味です。今回は micro:bit 基板上に実装されている中央のLEDを光らせてみます。
micro:bit を接続
micro:bit を micro USB ケーブルでパソコンに接続してください。micro:bit 基板の裏側にある、通電状態を示すLEDが点灯しているはずです。表側のLEDには、もしかするとこの時点で既に何か表示されているかもしれませんが、それは無かったものとして先に進んでください。
Arduino IDE でプログラミング
Arduino IDE を起動するとこのような画面になっています。
中央の白い部分にプログラムのひな型が最初から表示されています。ここにプログラムを書いて行きます。プログラミング言語はC++です。<stdio.h> 等の標準ライブラリに含まれる関数は一部使えないものがありますので注意してください。main()関数がありませんが、Arduino IDEが準備したmain()関数がどこかで動いている、と考えてください。インストール状態に依存しますが、main()のソースコードは例えば C:\Users\ユーザー名\AppData\Local\Arduino15\packages\sandeepmistry\hardware\nRF5\0.7.0\cores\nRF5\main.cpp にあります。一部を抜き出すと次のようになっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
int main( void ) { init(); initVariant(); delay(1); setup(); for (;;) { loop(); if (serialEventRun) serialEventRun(); } return 0; } |
Arduino IDE のプログラムは setup()、loop()という関数を必ず記述しなければなりません。
ひな型のソースコードは削除して、下のプログラムを Arduino IDE の中にコピペで貼り付けてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
void setup() { pinMode(27, OUTPUT); //ROW2 pinMode(10, OUTPUT); //COL3 } void loop() { // LED ON digitalWrite(27, HIGH); digitalWrite(10, LOW); delay(200); // LED OFF digitalWrite(27, LOW); digitalWrite(10, HIGH); delay(200); } |
プログラムを説明しておきます。まず、前半部分です。
1 2 3 4 |
void setup() { pinMode(27, OUTPUT); //ROW2 pinMode(10, OUTPUT); //COL3 } |
setup() は micro:bit が起動されたりリセットされたときに1度だけ実行される関数です。通常、変数や接続デバイスの初期化処理をここに書きます。今回はLEDにアクセスするための情報を設定しています。micro:bit の25個のLEDは ROW1~3、COL1~9 のマトリックス上に接続されており、中央のLEDは ROW2 と COL3 で特定することができます。下の図で「2.3」と書いてあるのがそれを表しています。(画像をクリックすると拡大されます)
さらに、ROW、COL それぞれの信号はGPIOの各ピンに接続されています。
ROW番号 | ROWのGPIO番号 |
1 | 26 |
2 | 27 |
3 | 28 |
COL番号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
COLのGPIO番号 | 3 | 4 | 10 | 23 | 24 | 25 | 9 | 7 | 6 |
表とプログラムを良く見比べてください。ROW2はGPIOの27番ピン、COL3はGPIOの10番ピンに接続しているので上のようなプログラムになっています。LEDを制御するとき GPIO は出力として使うので、ピンの属性を “OUTPUT” と定義しています。
次にプログラムの後半部分です。
1 2 3 4 5 6 7 8 9 10 |
void loop() { // LED ON digitalWrite(27, HIGH); digitalWrite(10, LOW); delay(200); // LED OFF digitalWrite(27, LOW); digitalWrite(10, HIGH); delay(200); } |
loop() はデバイスが起動している間ずっと繰り返し呼ばれ続ける関数です。ここでは、digitalWrite() 関数でLEDに信号を送っています。micro:bit のLEDは ROWを ”HIGH”、COLを “LOW” に設定すると点灯するような回路になっています。消灯する場合はその逆です。delay() は待ち時間を指定する関数で、単位はミリ秒です。delay(1000) なら1000ミリ秒(=1秒)何もせずに待ちます。ソースコードに繰り返しを意味する for や while がありませんが、loop() 関数そのものが繰り返し呼ばれ続けると考えてください。全体では、LEDオン→0.2秒後にLEDオフ→0.2秒後にLEDオン、という動作が繰り返されます。

プログラムを書き込む
右向きの矢印のアイコンを押してください。もしまだファイルを保存していなければ保存するように誘導されます。
正常に書き込めたら「ボードへの書き込みが完了しました。」と表示されます。
違うメッセージが表示されたり、その下の黒い部分にエラーメッセージのようなものが表示されていたら書き込みに失敗しています。Arduino IDE のインストール、設定の手順を何か間違っていますので再確認してください。
micro:bit の中央のLEDが「チカチカ」していることを確認してください。
課題
課題1
中央のLEDではなく、右下のLEDを点滅させてください。右下のLEDは ROW3、COL2 です。ROW3 は GPIO=28、COL2 は GPIO=4 に接続されています。
課題2
モールス信号の「SOS」を光らせてください。Sは短く3回、Oは長く3回です。つまり「・・・ ー ー ー ・・・」と光れば成功です。光らせるLEDは中央でも右下でもどちらでも構いません。
課題3
左上のLEDから右方向へ、右端に到達したら下段の左端から右方向へ、無限にLEDが点灯し続けるプログラムを作ってください。loop() 関数は例えば次のようになります。(このとおりでなくても構いません)
1 2 3 4 5 6 7 8 9 |
void loop() { for (int i=0; i<5; i++) { for (int j=0; j<5; j++) { led_on(i, j); delay(200); led_off(i, j); } } } |
GPIOの番号を #define 文で定義すると見やすいプログラムになります。
コメント