前回はブレッドボードの使い方の練習でした。プログラムはProject0.1で使用したのものを利用しました。
さて今回はボタンと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が点灯し、もう一度押したら消灯するように変えてみましょう。
コメント