電子工作の入門として最初の題材としてはLEDをチカチカと点滅させるLチカをはじめに取り上げることが一般的です。
本ページでもこのLチカを通してArduinoのSetup関数とLoop関数について学んでみます。
今回使用するLEDと抵抗について、扱いが不安な方は以下のページを参考にしてみてください。
キットは前回同様、以下の製品を使って進めていきます。
ELEGOO Arduino用のUNO R3 最終版スタータキット
前回はこちら
回路の配線
今回はArduinoに接続したLEDを点滅させる回路を制作します。
下の図を参考に、ブレッドボートとジャンプワイヤを使用し、接続します。
接続する抵抗の大きさによってLEDの明るさが変わります。下の図では330Ωとしております。
LEDには向きがありますが、抵抗には向きはありません。
ブレッドボートは内部で以下の図のようにつながっています。
上の図と全く同じ場所、配線である必要はなく、
Arduinoの3番ポート⇒330Ωの抵抗⇒LEDの+(アノード)ピン
LEDのー(カソード)ピン⇒ArduinoのGNDピン
とつながるように配線してください。
プログラム
次にプログラムを作成します。
#define LED 3 //LEDに3をセットする
// セットアップ関数:プログラム起動時に一度だけ実行される
void setup() {
// 3番ピンを出力として設定
pinMode(LED, OUTPUT);
}
// ループ関数:setup()の後で無限に繰り返し実行される
void loop() {
digitalWrite(LED, HIGH); // 3番ピンをオンにする
delay(1000); // 1000ミリ秒(1秒)待つ
digitalWrite(LED, LOW); // 3番ピンをオフにする
delay(1000); // 1000ミリ秒(1秒)待つ
}
実行すると以下のように点滅するはずです。
解説してゆきます。
プログラムの記述上の注意
・大文字と小文字は厳密に区別されます。
⇒○digitalWrite ×DigitalWrite
・全角文字を使用しない。特に全角スペースを誤挿入しないようにしてください。
・Arduino IDEではプログラムは「Ctrl+T」で見やすく整形できるので、常に整形する。
・— 括弧の閉じ忘れに注意する。
⇒開括弧を打ったら直後に閉括弧を打つ癖をつけ、閉じ終わってから中身を書くと間違いが起きにくいです。
関数について
4~7行目までの範囲、10~15行目までの範囲を、それぞれ関数という単位で呼びます。
Arduinoでは特に、
4~7行目までの範囲をsetup関数、10~15行目までの範囲をloop関数といいます。
コメントアウトについて
プログラムでは実行される内容を人間に分かりやすくするために実際の動作には関係ない文字を入力することが出来ます。
これをコメントアウトといいます。
コメントはコンパイラから無視され、コンピュータに出力されることはないので、チップ上のメモリを消費しません。
Arduino言語の場合は//(スラッシュ)を2つ連続で入力すると以降の文字がコメントアウトとして認識されます。
複数行まとめてコメントアウトする場合は
/* と */ で挟みます。以下の通りです。
void setup() {
// 電源投入後 または リセットボタン押下後に、1度だけ呼び出される
}
void loop() {
/*
setup関数の実行後
繰り返し呼び出される
*/
}
プログラムの流れについて
まず、関数以外の部分についてプログラムの上から順番に実行されます。
このプログラムで関数に属さないのは1行目のみですので、まず01行目が実行されます。
その後はsetupという名前がついている関数が呼び出されます。
setup関数がloop関数よりも上に記述されているから先に呼び出されるわけではありません。
setupという名前が付けられているから先に呼び出されている点に注意してください。
setup関数内の命令が上から順番に実行されます(具体的には6行目が実行される)。
つづいて、loop関数が呼び出されて、loop関数内の命令が上から順番に実行されます。
loop関数内の命令が最後まで実行されると、再びloop関数が呼び出され内部の命令が上から順番に実行されます(以下、この繰り返し)。
フローチャートに示すと以下の通りです。
各命令の意味
#define
文字列の置き換え
Defineとは「定義」の意味です。
1行目の「#define LED 3」は、「以降、LEDという文字がでてきたら、それを3に読み換えよ」という命令になります。
よって、6行目の「pinMode(LED,OUTPUT);」は、実際には「pinMode(3,OUTPUT);」に読み換えられて実行されます。
pinMode
Arduino UNOには0番から13番までの14個のデジタル入出力端子が実装されています。
これらは、プログラムによりデジタル入力(5Vまたは0Vを入力する端子)あるいはデジタル出力(5Vまたは0Vを出力する端子)のいずれかに設定できます。
6行目の「pinMode(LED,OUTPUT);」は、3番ポート(#defineによりLEDは3に読み換え)をデジタル出力端子に設定しています。
例えば、12番ポートをデジタル入力ポートとして使用したい場合は「pinMode(12,INPUT);」という命令を記述すればよいです。
digitalWrite
デジタル出力に設定されたポートの出力状態を変更するためには、digitalWrite命令を使用します。
11行目の「digitalWrite(LED,HIGH);」は「3番ポートの出力をHレベル(5V)にせよ」という命令となります。
出力は、一度、設定されると再度設定されるまで、その値を維持することに注意してください。(つまり、この場合は5Vを維持する)
delay
delayは指定の時間だけプログラムを停止(ポートの出力状態などは維持)する命令です。
停止時間はミリ秒単位で指定します。
12行目の「delay(1000);」は、「その状態のまま(次の命令に進まずに)1秒待機せよ」という意味となります。
Arduino 実験①
5番ポートに接続されたLEDがはじめに3秒間点灯し、消灯する。
その後9番ポートに接続されたLEDが0.5秒おきに点灯と消灯を繰り返し続ける回路、プログラムを作成せよ。