はじめに
こんにちは!今回は、押すたびにLEDの点灯・消灯を切り替える「トグルスイッチ風」のプログラムに挑戦します。前回の「押してる間だけLEDが点灯」とは違い、「押す→点灯、もう一度押す→消灯」といった動作になります。
使用する部品
前回と同じ構成でOKです!
| 部品名 | 数量 | 備考 |
|---|---|---|
| Arduino Uno | 1 | |
| LED(赤) | 1 | |
| 抵抗(330Ω) | 1 | LED保護用 |
| 押しボタン | 1 | |
| ブレッドボード | 1 | |
| ジャンパーワイヤー | 数本 |
接続方法(内部プルアップ)
| Arduinoピン | 接続先 | 内容 |
|---|---|---|
| D2 | LEDの+端子 | 出力ピン |
| GND | LEDの−端子(→抵抗) | GNDへ接続 |
| D3 | ボタンの片側 | 内部プルアップ付き入力ピン |
| GND | ボタンのもう片側 | 押すとGNDに落ちる構成 |

プログラム(トグルスイッチ)
const int ledPin = 2; // LEDのピン
const int buttonPin = 3; // ボタンのピン
bool ledState = false; // LEDの状態(ON/OFF)
bool lastButtonState = HIGH; // 前回のボタン状態
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP); // 内部プルアップ
}
void loop() {
bool currentButtonState = digitalRead(buttonPin);
// ボタンが押された瞬間(HIGH → LOW)だけ検出
if (lastButtonState == HIGH && currentButtonState == LOW) {
ledState = !ledState; // 状態を反転
digitalWrite(ledPin, ledState ? HIGH : LOW);
delay(200); // チャタリング対策(200ms待機)
}
lastButtonState = currentButtonState;
}

実行結果
-
押すたびにLEDのON/OFFが切り替わります
-
連続押しにも対応し、チャタリング対策もOK
おわりに
この「トグル動作」は、スイッチで家電を操作するような仕組みにも応用できます。LEDだけでなく、ブザーやリレーなどにも使える基本パターンです。
次回予告(案)
-
LEDをゆっくり点灯/消灯する「フェード制御」
-
複数のLEDを順番に光らせてみる
-
サウンドブザーを鳴らす