前回は、UIAPduinoを使ってLEDをチカチカさせる「Lチカ」に挑戦しました。
今回はステップアップして、「ボタン入力」にチャレンジします。
ボタンを押したときだけLEDが光るプログラムを作ってみましょう。
マイコンは「入力」と「出力」を組み合わせることで、いろいろな動きが作れるようになります。
その第一歩として、ボタンの使い方をしっかり覚えていきましょう!
今回つかったLEDチカチカのINOファイルはこちらからダウンロードできます。
また、動画でも解説しているのでチェックしてみて下さい↓↓↓

ボタンでLEDを光らせてみよう
ボタンを押したときにLEDが光るようにしてみましょう。
タクトスイッチという4つ足のパーツを使います。
タクトスイッチは、横に並んだ足どうしがつながっていて、
ボタンを押すとすべての足がつながります。
中央の溝をまたぐようにさし、対角線の足に線をつなぎます。
回路をつくろう
前回のLチカの回路に、ボタンと10kΩの抵抗を追加してみましょう。
3V3のピンから電源をもらい
ボタンの片方の足につなぎます。
ボタンを押すと、反対側の足につながり、
マイコンの5番ピンに3.3V(HIGH)が伝わります。
また、5番ピンにつながる回路を枝分かれさせて、抵抗を通してGNDにつなぎます。
プログラムを書こう
前回のLチカのプログラムを、変更してみましょう。
5番ピンにBUTTONという名前をつけ
ピンモードをINPUT(入力)モードにします。
ボタンが押されて、3.3Vのピンから5番ピンに電気が流れると
5番ピンがHIGHになるので
HIGHならLEDを点灯、LOWならLEDを消灯させましょう。
#define LED 2
#define BUTTON 5 //5番ピンをBUTTONとよぶ
void setup() {
pinMode(LED, OUTPUT);
pinMode(BUTTON, INPUT); //5番ピンを入力モードに
}
void loop() {
int buttonState = digitalRead(BUTTON); //5番ピンの状態をよみとる
if (buttonState == HIGH) { //ステータスがHIGHなら
digitalWrite(LED, HIGH);
} else { //ステータスがHIGHでないなら
digitalWrite(LED, LOW);
}
}
digitalRead()
ピンの状態(HIGHかLOW)を読み取る命令です。
書き込みしてみよう
リセットボタンを押しながらUSBを接続し、書き込みモードにします。
「→」アイコンをクリックして書き込みましょう。
試してみよう
ボタンから枝分かれさせた10kΩの抵抗を抜いてみましょう。
すると、ボタンを押していないのに
LEDが点灯したままになってしまいました。
なぜ抵抗がないとLEDがついてしまうのでしょう?
なぜこうなるの?
ボタンが押されていないとき、ピンはどこにもつながっていない状態になります。
この状態を「解放(オープン)」といいます。
5番ピンにGNDの道を作ってあげると、ふわふわ状態だったピンがLOWにひっぱられます。
抵抗を入れてあげることで、
ボタンが押されたとき → 3.3Vが伝わりHIGHになる
ボタンが離されたとき → GNDに引っ張られてLOWになる
というように、ピンの状態を安定して読み取ることができます。
このように、何もしていないときにピンがLOWになるようにする回路を
プルダウン抵抗、プルダウン回路といいます。
内部プルアップを使ってみよう
ピンをGNDにつないで、ボタンが押されていないときにLOWにする仕組みがプルダウンでした。
マイコンには「内部プルアップ」という機能があり、
ピンが常にHIGHに引っ張られている状態になります。
内部プルアップを使えば、外付けの抵抗はいりません。
図のように配線してみましょう。
プルダウン抵抗は外し、
• ボタンの片方を3番ピンに
• もう片方をGNDに
接続します。
プログラム
#define LED 2
#define BUTTON 3
void setup() {
pinMode(LED, OUTPUT);
pinMode(BUTTON, INPUT_PULLUP); //ピンをプルアップモードに
}
void loop() {
int buttonState = digitalRead(BUTTON);
if (buttonState == LOW) { //ボタンがおされたときLOW
digitalWrite(LED, HIGH);
} else {
digitalWrite(LED, LOW);
}
}
💡 ワンポイント
プルアップでは、押していないときがHIGH、押したときがLOWになります。
条件が逆になるので注意しましょう。
これで、外付け抵抗を使わずに、プルアップ回路でボタンを実装することができました。
UIAPduinoを書き込みモードにして、プログラムを書き込んでみましょう。
ボタンが押されたときにLEDが光れば、プルアップ回路は成功です。
まとめ
ボタンを使って、LEDをコントロールできるようになりました!
プルダウン回路とプルアップ回路の違いも理解できると、入力の扱いがぐっと分かりやすくなります。
ボタンを使えば、押したときだけ動くプログラムやゲームの操作など、できることが一気に広がります。いろいろ試してみましょう!



コメント