こんにちは。駆け出しエンジニアのまっきーです。
本記事は「Lチカだけじゃつまらない、ほかに簡単にできることないの?」と思っている方におすすめです!
さて、Lチカを終え、次に挑戦するのはスイッチとの連動です。
やることはとっても単純、「スイッチを押したらLEDが光るようにする」
これだけです。
早速始めていきましょう!
目的
タクトスイッチを押しLED4つが点灯をするプログラム作成
前回のプログラムに付け加える形でコードを書いていきます。
前回の記事はこちら↓
準備するもの
RaspberryPi3B+
LED 4つ(1つでも問題ないです)
タクトスイッチ 1つ
抵抗(400Ω) 4つ
ジャンパー線(オス・メス)5本ほど
ジャンパー線(オス・オス)2本ほど
上記のものは全てAmazonで手に入ります。
ちなみに私は、こちらのセットで揃えました。
タクトスイッチとは

タクタルスイッチとも呼ばれる「感触のあるスイッチ」です。
押したときのクリック感は最高です。
また、押してる間だけON、話したらOFFになる「モーメンタリ」と言われる動作をします。
プルアップ、プルダウン抵抗とは
プルアップ抵抗(プルアップていこう、英: pull-up resistor)は、電子回路においてなんらかの信号線への入力が切り離されたような状態[1]になっても、その信号線を内部でVddなどの電位が高い電圧源にその抵抗を通して接続しておくことにより、電位が不安定な状態にさせず[2]、じゅうぶんに高い電位に保っておくための抵抗である[3]。また同様にして、電位が低いグラウンド(アース)[4]などに接続して、じゅうぶんに低い電位に保っておくための抵抗が プルダウン抵抗である。(Wikipedia)
マイコンなどの機器は1,0もしくはON,OFFで信号の判断をしています。
簡単に説明をしますと、
プルアップ、ダウンの設定をしないと「ON,OFFどちらでもない状態」となってしまうためマイコンが困ってしまいます。
今回は、慣例的に使われるというプルアップ抵抗で設定を行っていきます。
つまり「スイッチが押されたときはLOW,押されていないときはHIGH」ということです。
詳しく知りたい方はこちらのサイトを見てください。とても詳しく書いてあります。
https://voltechno.com/blog/pullup-pulldown/
ラズパイにはソフトウェア側でプルアップ・プルダウンの設定ができますのでプログラムの中で紹介します。(内部プルアップ抵抗と呼ばれています)
電子回路
電子回路図です。

プログラム
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
#include <stdio.h> #include <wiringPi.h> #define SW 22 int main(void){ int gpio[] = {23,24,25,26}; int i; wiringPiSetupGpio(); for(i = 0;i < 4;i++){ pinMode(gpio[i],OUTPUT); } pinMode(SW,INPUT); pullUpDnControl(SW,PUD_UP); while(1){ if(digitalRead(SW) == LOW){ delay(20); for(i = 0;i < 4;i++){ digitalWrite(gpio[i],HIGH); delay(100); digitalWrite(gpio[i],LOW); delay(100); } } } return 0; } |
前回とプログラムはほとんど同じです。
注目していただきたい部分は13,14,17行目です。
新しい関数が出てきていますね。この3つを押さえれば今回は十分です。
それでは一つずつ見ていきましょう。
関数詳細
pinMode(ピンの番号,INPUT)
・LEDでもやりましたね。今回はスイッチ入力なのでINPUTに設定します。
pullUpDnControl(ピンの番号,PUD_UP)
・この関数が内部プルアップ・プルダウン抵抗の設定です。
・2つ目の引数に設定できる値が3つあります
1 PUD_UP プルアップ抵抗を使用
2 PUD_DOWN プルダウン抵抗を使用
3 PUD_OFF 内部抵抗を使用しない
digitalRead(ピンの番号)
・スイッチが押されているか押されていないかを確認する関数です。
・今回は押されているときLOWになるので注意してください。
ビルド、実行をすると…
スイッチのON,OFFでLEDを制御することができました!
まとめ
・プルアップに設定→押されていないときHIGH、押されているときLOW
・プルダウンに設定→押されていないときLOW、押されているときHIGH
pinMode(ピンの番号,INPUT)
pullUpDnControl(ピンの番号,PUD_UP)
digitalRead(ピンの番号)
この3つの関数を使ってタクトスイッチの制御ができる!
最後まで見て頂き、ありがとうございました。
次回はPWM制御というものを行っていきたいと思います。
こちらは参考書籍です。