Arduinoの電子工作で遊ぼう! その11 ~スイッチの状態によってLEDの動作を変える~
まずは回路図です
ブレッドボードに配線します
① Arduinoの5VピンとGNDピンをブレッドボードに接続
② 赤のLED2個と緑のLEDを1個をブレッドボードに差し込む
③ LEDそれぞれの短い方の足に220Ωの抵抗器を接続
④ 抵抗器の反対側をGNDに接続
⑤ 緑のLEDの長い方の足をArduinoの3番ピンに接続
⑥ 赤のLEDの長い方の足をArduinoの4番ピンと5番ピンに接続
⑦ 押しボタンスイッチをブレッドボードに差し込む
⑧ 押しボタンスイッチのピンのひとつを電源(+)ラインに、反対側のピンをArduinoの2番ピンに接続
⑨ 押しボタンスイッチのArduinoの2番ピンに接続したピンに10kΩの抵抗器を接続
⑩ 10kΩの抵抗器の反対側をGNDに接続
Arduinoのプログラム(スケッチ)を作ります
Arduinoのプログラムに必ず必要なのが、setup()関数とloop()関数です
void setup() {
}
void loop() {
}
setup()関数はArduinoの電源がオンになったとき、最初に一度だけ実行されます。
loop()関数はsetup()関数の実行が終わった後に繰り返し実行されます
それでは、スイッチの状態に応じてLEDの点灯パターンを切り替えるLED制御プログラムを見てみましょう
これがスケッチの全体です
int switchState = 0;
void setup() {
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(2,INPUT);
}
void loop() {
switchState = digitalRead(2);
if(switchState == LOW){
digitalWrite(3,HIGH); // 緑色のLED
digitalWrite(4,LOW); // 赤色のLED
digitalWrite(5,LOW); // 赤色のLED
}
else{ // 押しボタンスイッチが押されていない場合
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
delay(250); // 1/4秒待つ
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
delay(250); // 1/4秒待つ
}
} //ループの初めに戻る
解説をしていきます
1. 変数の宣言と初期設定
int switchState = 0;
switchState という変数を宣言しています。この変数はデジタルピン2に接続されたスイッチの状態を保持するために使います。0で初期化されていますが、後に実際のスイッチ状態(HIGHまたはLOW)が代入されます。
void setup() {
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(2, INPUT);
}
setup()関数はArduinoの初期設定を行う関数です。ここでは次の設定が行われます。
ピン3、4、5を OUTPUT モードに設定しています。これらのピンはLEDに接続されており、電流を流して点灯させるための設定です。
ピン2を INPUT モードに設定しています。ピン2には押しボタンスイッチが接続されており、その入力を読み取ります。
2. メインのループ部分
void loop() {
switchState = digitalRead(2);
loop()関数は、プログラムが常に繰り返し実行される部分です。
最初に switchState にデジタルピン2の状態を読み取ります。digitalRead(2) によって、スイッチの状態(LOWまたはHIGH)が取得されます。
3.スイッチが押されていないときの動作
if (switchState == LOW) {
digitalWrite(3, HIGH); // 緑色のLED
digitalWrite(4, LOW); // 赤色のLED
digitalWrite(5, LOW); // 赤色のLED
}
ボタンが押されていないとき、ピン2の入力はLOWになります(プルダウン抵抗による効果)。
この場合、緑色のLED(ピン3)が点灯し、赤色のLED(ピン4とピン5)は消灯します。
つまり、スイッチが押されていないときは、緑色のLEDが点灯した状態です。
4.ボタンが押されたときの動作
else {
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
delay(250); // 1/4秒待つ
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
delay(250); // 1/4秒待つ
}
}
ボタンが押されるとピン2の入力がHIGHになります。
この場合、緑色のLED(ピン3)は消灯し、赤色のLED(ピン4とピン5)が交互に点滅します。
最初にピン5の赤色LEDが点灯し、1/4秒待機します(delay(250))
次にピン4の赤色LEDを点灯させ、ピン5のLEDを消灯し、再び1/4秒待機します
この交互点滅のサイクルはボタンが押されている間ずっと続きます。
5.抵抗の使い方によるポイント
プルダウン抵抗を使うことで、ボタンが押されていないときでもピン2が確実にLOWになるようにしています。これにより、不安定な入力を防ぎ、誤動作を防止します。
押しボタンスイッチが押されるとピン2に電圧が供給されてHIGHとなり、その結果プログラムの動作が変わります。