注釈

こんにちは、SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Communityへようこそ!Facebook上で、仲間と一緒にRaspberry Pi、Arduino、ESP32をさらに深く探求しましょう。

なぜ参加するのか?

  • 専門的なサポート:購入後の問題や技術的な課題をコミュニティやチームの助けを借りて解決。

  • 学びと共有:スキルを向上させるためのヒントやチュートリアルを交換。

  • 限定プレビュー:新製品発表や予告編に早期アクセス。

  • 特別割引:最新製品の特別割引を楽しむ。

  • フェスティブプロモーションとプレゼント:プレゼントやホリデープロモーションに参加。

👉 私たちと一緒に探索と創造を始める準備はできましたか?[ここ]をクリックして、今すぐ参加しましょう!

レッスン40: タッチトグルライト

このプロジェクトは、タッチセンサーと交通信号LEDモジュールを利用した簡単な交通信号制御システムの実装です。 タッチセンサーを作動させると、次の順序でLEDが点灯します:赤 -> 黄 -> 緑。

Required Components

このプロジェクトでは、以下のコンポーネントが必要です。

一式購入するのが便利です。以下のリンクをご覧ください。

Name

ITEMS IN THIS KIT

LINK

Universal Maker Sensor Kit

94

Universal Maker Sensor Kit

以下のリンクから個別に購入することもできます。

Component Introduction

Purchase Link

ESP32 & Development Board

購入

タッチセンサーモジュール

-

信号機モジュール

-

ブレッドボード

購入

Wiring

../_images/Lesson_40_Touch_toggle_light_esp32_bb.png

Code

コード解析

このプロジェクトの動作は簡単です。センサーがタッチを検出すると、次のLED(赤 -> 黄 -> 緑)が点灯します。これは currentLED 変数によって制御されます。

  1. ピンの定義と初期値の設定

    // Define pins for touch sensor and LEDs
    const int touchSensorPin = 14;  // touch sensor pin
    const int rledPin = 27;         // red LED pin
    const int yledPin = 26;         // yellow LED pin
    const int gledPin = 25;         // green LED pin
    
    int lastTouchState;     // the previous state of touch sensor
    int currentTouchState;  // the current state of touch sensor
    int currentLED = 0;     // current LED 0->Red, 1->Yellow, 2->Green
    

    これらの行は、Arduinoボードのコンポーネントのピン接続を確立し、タッチセンサーとLEDの状態を初期化します。

  2. setup() 関数

    void setup() {
      Serial.begin(9600);              // initialize serial
      pinMode(touchSensorPin, INPUT);  // configure touch sensor pin as input
    
      // set LED pins as outputs
      pinMode(rledPin, OUTPUT);
      pinMode(yledPin, OUTPUT);
      pinMode(gledPin, OUTPUT);
    
      currentTouchState = digitalRead(touchSensorPin);
    }
    

    この関数は、Arduinoの初期設定を行い、入力および出力モードを定義し、デバッグ用のシリアル通信を開始します。

  3. loop() 関数

    void loop() {
      lastTouchState = currentTouchState;               // save the last state
      currentTouchState = digitalRead(touchSensorPin);  // read new state
    
      // check if the touch sensor was just touched
      if (lastTouchState == LOW && currentTouchState == HIGH) {
        Serial.println("The sensor is touched");
    
        turnAllLEDsOff();  // Turn off all LEDs
    
        // switch on the next LED in sequence
        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;
        }
      }
    }
    

    このループはタッチセンサーを継続的に監視し、タッチが検出されるとLEDを順番に切り替え、常に一つのLEDだけが点灯するようにします。

  4. LEDを消灯する関数

    // function to turn off all LEDs
    void turnAllLEDsOff() {
      digitalWrite(rledPin, LOW);
      digitalWrite(yledPin, LOW);
      digitalWrite(gledPin, LOW);
    }
    

    この補助関数は、すべてのLEDを消灯し、切り替えプロセスをサポートします。