プロジェクト13 ミニランプ

1. 説明

このプロジェクトでは、Arduino UNOとボタンを使ってランプを制御します。ボタンを押すと、ランプの状態が切り替わります(ONまたはOFF)。

2. 動作原理

ボタンが離されているとき、R29を通った電圧VCCがS端子に高レベルを供給します。押されると、ピン1と3、ピン2と4が接続され、S1の電圧がGNDに接続されて低レベルになります。このとき、R29はVCCとGND間の短絡を防ぎます。

3. 配線図

4. テストコード

/*
  keyestudio ESP32 Inventor Learning Kit 
  Project 13.1 Mini Lamp
  http://www.keyestudio.com
*/
int button = 15;
int value = 0;

void setup() 
{
  Serial.begin(9600); //シリアル通信のボーレートを9600に設定
  pinMode(button, INPUT);  //ボタンピンをデジタルポート8に接続し、入力モードに設定
}

void loop() 
{
  value = digitalRead(button);//ボタンの値を読み取る
  Serial.print("Key status:"); //シリアルポートに「Key status:」を表示
  Serial.println(value); //ボタンの値をシリアルポートに表示し改行
}

5. テスト結果

配線を接続しコードをアップロードした後、シリアルモニターを開きボーレートを9600に設定します。
ボタンを押すとシリアルポートに「Key status: 0」と表示され、離すと「Key status: 1」と表示されます。

6. 知識の拡張

次に、ボタンの状態を使ってLEDを制御します。

  • フローチャート:

  • 配線図:

  • コード

/*
  keyestudio ESP32 Inventor Learning Kit 
  Project 13.2 Mini Lamp
  http://www.keyestudio.com
*/
#define led	   4
#define button 15
bool ledState = false;

void setup() 
{
  // デジタルピンPIN_LEDを出力として初期化
  pinMode(led, OUTPUT);
  pinMode(button, INPUT);
}

// loop関数は永遠に繰り返し実行される
void loop() 
{
  if (digitalRead(button) == LOW) {    //ボタンの値が初めて0になったとき、チャタリングが発生するため20ms遅延して再度判定
    delay(20);                              //20ms遅延
    if (digitalRead(button) == LOW) {   //ボタンの値が0か判定
      ledState = !ledState;                 //ledStateを反転させ、LEDのON/OFFを切り替える
      digitalWrite(led, ledState);
    }
    while (digitalRead(button) == LOW);     //ボタンが押されている間はループを保持し、離すと抜ける
  }
}
  • テスト結果

赤いボタンで赤色LEDの点灯・消灯を制御できます。