Project 2.1 スイッチ/Button & LED

前回はブレッドボードの使い方の練習でした。プログラムはProject0.1で使用したのものを利用しました。

あわせて読みたい
Project 1.1 外部LEDの点灯/Blink 前回はESP32のオンボードLEDを点滅させました。 https://kaneshige.org/?p=145 今回はブレッドボード上にLEDの回路を作って点滅させましょう。 ブレッドボードとははん...
あわせて読みたい
Project 0.1 内蔵LEDの点灯/Blink 教材については『こどもプログラミング教室』と互換性のあるESP32-S3をベースにした学習キットを使います。freenoveの回し者ではないですが、このキットは値段の割に学...

さて今回はボタンとLEDです。ボタンを押したらLEDが光る、ボタンを離したらLEDが消えるという回路&プログラムをコピペしていきます。(皆さん覚えていますか?守破離の『守』ですよ。堂々とコピペして型を覚えていきましょう!)

回路はこうです。

追加されたのは、電源→抵抗10KΩ→タクトスイッチ→抵抗10KΩ→黄色のジャンプワイヤー→GPIO13という回路です。

タクトスイッチからGNDへも黒いジャンプワイヤーで繋がっています。

ソースコードはこちら

/**********************************************************************
  Filename    : ButtonAndLed
  Description : Control led by button.
  Auther      : www.freenove.com
  Modification: 2022/10/19
**********************************************************************/
#define PIN_LED    2
#define PIN_BUTTON 13
// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin PIN_LED as an output.
  pinMode(PIN_LED, OUTPUT);
  pinMode(PIN_BUTTON, INPUT);
}

// the loop function runs over and over again forever
void loop() {
  if (digitalRead(PIN_BUTTON) == LOW) {
    digitalWrite(PIN_LED,HIGH);
  }else{
    digitalWrite(PIN_LED,LOW);
  }
}

コンパイルして書き込みすると動作します。

目次

コード解説

さて今回はどうしてこのような動作になったのでしょうか。ソースコードを追いかけてみましょう。

まずは8行目です。

/**********************************************************************
  Filename    : ButtonAndLed
  Description : Control led by button.
  Auther      : www.freenove.com
  Modification: 2022/10/19
**********************************************************************/
#define PIN_LED    2
#define PIN_BUTTON 13
// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin PIN_LED as an output.
  pinMode(PIN_LED, OUTPUT);
  pinMode(PIN_BUTTON, INPUT);
}

// the loop function runs over and over again forever
void loop() {
  if (digitalRead(PIN_BUTTON) == LOW) {
    digitalWrite(PIN_LED,HIGH);
  }else{
    digitalWrite(PIN_LED,LOW);
  }
}

ボタン用のGPIOピンは13番であると宣言(#define)していますね。

つづいて13行目です

/**********************************************************************
  Filename    : ButtonAndLed
  Description : Control led by button.
  Auther      : www.freenove.com
  Modification: 2022/10/19
**********************************************************************/
#define PIN_LED    2
#define PIN_BUTTON 13
// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin PIN_LED as an output.
  pinMode(PIN_LED, OUTPUT);
  pinMode(PIN_BUTTON, INPUT);
}

// the loop function runs over and over again forever
void loop() {
  if (digitalRead(PIN_BUTTON) == LOW) {
    digitalWrite(PIN_LED,HIGH);
  }else{
    digitalWrite(PIN_LED,LOW);
  }
}

ボタン用のピンモードの設定がINPUTになりました。ですので、GPIO2のときの出力とは逆に入力を検知するモードとして設定していますね。

そして最後、18~21行目です。

/**********************************************************************
  Filename    : ButtonAndLed
  Description : Control led by button.
  Auther      : www.freenove.com
  Modification: 2022/10/19
**********************************************************************/
#define PIN_LED    2
#define PIN_BUTTON 13
// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin PIN_LED as an output.
  pinMode(PIN_LED, OUTPUT);
  pinMode(PIN_BUTTON, INPUT);
}

// the loop function runs over and over again forever
void loop() {
  if (digitalRead(PIN_BUTTON) == LOW) {
    digitalWrite(PIN_LED,HIGH);
  }else{
    digitalWrite(PIN_LED,LOW);
  }
}

初めてプログラムらしい制御構文が出てきました。if(もし)○○(なら)△△(しなさい)else(そうじゃなければ)□□(しなさい)という構文です。

プログラムの3大要素、条件分岐です。

ちなみに残りの2大要素は変数と繰り返しです。

これに各種関数などの命令を組み合わせればどんなプログラムでも作れると言っても過言ではないです。

もし、ボタンピン(GPIO13)がLOW(=0V)(Aのとき)ならLEDピン(GPIO2)をHIGH(3.3V)にする、そう(Aのとき)じゃなければLEDピン(GPIO2)をLOW(0V)にする。

ということが書いてあります。

電子回路を理解しないと難しいですが、タクトスイッチを押すと、電源→10KΩ→スイッチ→GNDと電気が流れますので、13番ピンは0V(=LOW)になります。

スイッチを押すとGPIO13はLOWなので、LEDはHIGHで点灯する、という流れですね。

その他のときはLEDをLOWなので消灯です。

今回はスイッチを押している間だけLEDが点灯していましたが、次回はスイッチを押したら点灯、もう一度スイッチを押したら消灯、という動作に変えていきましょう。

次回はスイッチを押したらLEDが点灯し、もう一度押したら消灯するように変えてみましょう。

あわせて読みたい
Project 2.2 デバウンス/MINI table lamp 前回はLEDをスイッチで制御しました。 https://kaneshige.org/?p=175 今回はスイッチの動作を変えます。スイッチを一度押すとLEDが点灯して、もう一度押すと消灯するよ...
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

金重総合研究所の主席研究員。
子供の頃から研究者を目指し、ライフワークとして日々様々な研究をしています。
経営・マネジメント・金融・DXあたりが本職です。
私を採用したい人、私と一緒に働きたい人、一緒に知識を肥やしていきたい人はぜひお声がけ下さい。

コメント

コメントする

目次