目次

3-3 Lチカ・コード解説

3-2のページでArduinoのルールを押さえた上で、3-1のLチカに使用したプログラム(3-1_Blink.ino)の内容と、実際の処理の流れを見てみましょう。

  

(ほぼ)逐条解説のお時間ですわよ

こちらが3-1_Blink.inoの全文です。プログラムの左側にある数字は何行目かを示しています。


1行目~3行目

ここは一番最初の宣言部です。今回のLチカでは、特に書くことがないので空白になっています。
空白なので、特に何も処理しないまま次のsetup部に進みます。

4行目

主にArduinoのソケットや繋いだ電子部品の初期設定をするsetup部の開始部分です。
ここから6行目までがsetup部になります。

5行目

setup部の内部に一行だけ命令文と、その後ろにコメントが書かれています。

pinMode(13, OUTPUT);//13番のピンを出力モードにする

まずpinModeとは、Arduinoのソケットをデジタル入出力に使う場合の初期設定をする命令文です。
Arduino Uno上部の1~13のソケットは、デジタル入力と出力に使えるソケットになっています。
入力と出力が兼用なので、使う前に“どのソケットを”、“デジタル入力/出力どちらで使うのか”を設定してやる必要があります。
今回は「13番のソケット」を「デジタル出力」で使いたいです。なのでpinModeの後ろの括弧に(13, OUTPUT)と入力してやります。
その後ろに命令文の終端を示す「;」を忘れずにつけましょう。
更に「//」を打って、この行の説明をコメントで残しておいてあります。

6行目

setup部はこれにて終了です。

7行目

体裁を見やすくするための空白行です。

8行目

無限ループで繰り返されるプログラムのメイン部分、loop部の開始です。ここから11行目までがloop部です。

9行目

いよいよメインのコードです。言うてたったの1行です。お得!!!!

digitalWrite(13, HIGH);

digitalWriteとは、デジタル出力を実行するための命令文です。
Arduinoの13番ソケットの電圧を5Vに上げ(=HIGHにし)たいので、digitalWrite後部の括弧に(13, HIGH)と打ち込みます。「;」も忘れずにどうぞ。
この命令文が実行されると、それまで0Vだった13番ソケットの電圧が5Vに上がります。
それにより13番ソケットから電気が外部に供給され始めます。
Lチカに使っている“L”の極小LED球は、Arduinoの内部で13番ソケットと繋がっているため、13番ソケットから“L”のLEDに電気が流れ、きれいに点灯し始めます。

10行目
//13番のピンに電圧をかけ始める=電気が流れてLEDが点灯する

未来の自分の為にコメントを残しておきましょう。
ちなみに10行目に書いているのは、9行目に書くと画面が横長になって見にくくなるからです。

11行目

loop部はこれにて終了です。Arduinoは9行目に戻り、9~11行目をずっとループし続けます。
ずっとループし続けるので、13番ソケットは実質ずっと5Vで電気を流し続けます。なので、LEDはずっと点灯し続けます。


応用編:Lチカを文字通りチカチカさせてみよう(delay)

Lチカのプログラムでは、“L”のLEDを点灯することができました。
今度はこれを点滅するプログラムに書き換えてみましょう。
メカニズムは単純で、点灯(HIGH)と消灯(LOW)を交互に切り替え続けることでチカチカさせます。
  

コードを改造するんじゃ

3-1_Blink.inoのloop部(9行目から11行目)を、下記の枠内のコードに置き換えてArduinoに書き込んでみてください。
Arduinoに書き込みが成功すると、“L”のLEDがせわしなくチカチカし始めると思います。

void loop() {
  digitalWrite(13, HIGH);
  //13番のピンに電圧をかけ始める=電気が流れてLEDが点灯する
  delay(100); //0.1秒待機する
  digitalWrite(13, LOW);
  //13番のピンの電圧を消す=電気が途絶えてLEDが消灯する
  delay(100); //0.1秒待機する
}

  

delay関数について

よく見ると何やら初めて見る命令文がありますね?
上から4行目と7行目にある delay は、プログラムの実行を待機する関数です。

Arduinoの動作速度は人間の時間感覚よりもずっとずっと高速です。
単純に点灯と消灯を繰り返すだけでは切り替え動作が速すぎて、人間の目にはLEDがずっと点灯し続けているように見えてしまいます。
点灯と消灯の間にdelayを挟むことで、人間が目で認識できる程度の速さにLEDの切り替え速度を遅らせます。

delay後部の括弧内には、待機させたい時間をミリ秒の数値で指定します。
今回は (100) が入っているので、待機時間は100ミリ秒 = 0.1秒です。
この0.1秒の待機時間が点灯直後と消灯直後にそれぞれ1回ずつ入っています。

なので、プログラムの動作は、

点灯の処理が実行!点灯開始!

delayで0.1秒の間、プログラムが次に進まないよう待機させる
その間(つまり0.1秒間)点灯状態が維持される

消灯の処理が実行!消灯!

delayで0.1秒の間、プログラムが次に進まないよう待機させる
その間(つまり0.1秒間)消灯状態が維持される

loop部の先頭に戻り、無限にこのサイクルを繰り返す

というものになります。

delayは電子部品、ひいてはギミックの動作するタイミングを制御したり、データ処理を正確にスムーズに実行するため等、多くの場面で非常に役に立つ関数です。
ぜひ覚えておいてください。