タッチトグルライト¶
このプロジェクトでは、タッチセンサーと信号機LEDモジュールを使って、シンプルな信号機制御メカニズムを作成します。タッチセンサーが活性化されると、LEDは次の順番で切り替わります:赤 -> 黄 -> 緑。
1. 回路の構築¶
2. コード¶
ultimate-sensor-kit\fun_project\08-Touch_toggle_light
のパスにある08-Touch_toggle_light.ino
ファイルを開くか、このコードを Arduino IDE にコピーペーストしてください。
3. コードの説明¶
このプロジェクトは基本的な原理で動作します:タッチセンサーでタッチが検出された場合、次のLED(赤 -> 黄 -> 緑)が点灯します。現在どのLEDが活性化しているかは、変数 currentLED
で管理されます。
ピンと初期値の定義
const int touchSensorPin = 2; // タッチセンサーのピン const int rledPin = 9; // 赤LEDのピン const int yledPin = 8; // 黄LEDのピン const int gledPin = 7; // 緑LEDのピン int lastTouchState; // タッチセンサーの前の状態 int currentTouchState; // タッチセンサーの現在の状態 int currentLED = 0; // 現在のLED 0->赤, 1->黄, 2->緑
これらの行は、Arduinoボードに接続するコンポーネントのピンを定義し、タッチとLEDの状態を初期化します。
setup() 関数
void setup() { Serial.begin(9600); // シリアル通信の初期化 pinMode(touchSensorPin, INPUT); // タッチセンサーのピンを入力として設定 // LEDピンを出力として設定 pinMode(rledPin, OUTPUT); pinMode(yledPin, OUTPUT); pinMode(gledPin, OUTPUT); currentTouchState = digitalRead(touchSensorPin); }
この関数は、Arduinoが電源オンまたはリセットされたときに一度だけ実行されます。ここでタッチセンサーを入力(値を読む)として設定し、LEDを出力(値を設定する)として設定します。また、デバッグを許可するシリアル通信を開始し、初期のタッチ状態を読み取ります。
loop() 関数
void loop() { lastTouchState = currentTouchState; // 最後の状態を保存 currentTouchState = digitalRead(touchSensorPin); // 新しい状態を読み取る if (lastTouchState == LOW && currentTouchState == HIGH) { Serial.println("センサーがタッチされました"); turnAllLEDsOff(); // すべてのLEDを消灯 // シーケンス内の次のLEDを点灯 switch (currentLED) { case 0: digitalWrite(rledPin, HIGH); currentLED = 1; break; case 1: digitalWrite(yledPin, HIGH); currentLED = 2; break; case 2: digitalWrite(gledPin, HIGH); currentLED = 0; break; } } }
メインループでは、現在のタッチ状態が前のものと比較されて読み取られます。タッチが検出された場合(LOWからHIGHへの遷移)、すべてのLEDが消灯し、シーケンス内の次のLEDが点灯します。
LEDを消灯する関数
void turnAllLEDsOff() { digitalWrite(rledPin, LOW); digitalWrite(yledPin, LOW); digitalWrite(gledPin, LOW); }
この関数は呼び出されたとき、すべてのLEDを消灯させるためにそのピンをLOWに設定します。