【Arduino#3】ボタンスイッチとLED回路
以前までは,スケッチ例であるBlinkについて扱っていましたが,これ以降は自分でスケッチを書くことでArduinoに対する理解を深めようと思う。
今回はボタンスイッチを用いて,スイッチ押すたびにLEDがON/OFF切り替わる回路を作成する。
1. 必要素子
- ブレッドボード
- 抵抗(10kΩ)
- ボタンスイッチ(以下,SW)
- LED
- ジャンパー線 3本
2. 配線図
今回の配線図は以下の通り。
これはSWのON/OFFを電圧に変換し,マイコンに読み取ることで,LEDを制御する回路となっている。
SWのON/OFFは黄色いジャンパー線が読み取っている。
以下に回路図を用いて説明する。赤い箇所は5Vを表す。
- SW=OFFの時
電圧源の+側は5Vであるが,SWがOFFになっていることから,SWの右半分はGNDと同様の0Vとなっている。
ここで,抵抗とGNDを接続しているのはSWの右半分の基準電圧を0Vに設定する為である。
即ち,配線図の黄色いジャンパー線でマイコンが読み取る値はLOWである。
- SW=ONの時
SWがONになったことによって,5Vの範囲が拡大した。抵抗があることによって,ショートすることを防いでいる。
即ち,配線図の黄色いジャンパー線でマイコンが読み取る値はHIGHである。
以上の回路によって,読み取ったSWのON/OFFに準じた制御指令をLEDに送ることでLEDのON/OFFを達成する。
3. スケッチ
const int SW = 7; //SWを7番pinに設定 const int LED = 13; //LEDを13番pinに設定 int val = 0; //7番pinから読み込んだ値を格納 int val_old = 0; //古いvalを格納 int state = 0; //SWの状態を格納 void setup() { pinMode(LED,OUTPUT); //13番pinを出力pinに設定 pinMode(SW, INPUT); //7番pinを入力pinに設定 } void loop() { val = digitalRead(SW);//7番pinからHIGH/LOWを読込 //SWのON/OFFでstateの状態を変更 if((val == HIGH)&&(val_old == LOW)){ state = 1 - state; //state=0 → state=1-0,state=1 → state=1-1=0 delay(10); //SWのバウンシングを防ぐために間隔設定 } val_old = val; //1つ前のvalを格納 //SW=ON⇒LED=ON or SW=OFF⇒LED=OFF if(state == 1){ digitalWrite(LED, HIGH); }else{ digitalWrite(LED,LOW); } }
4. スケッチで用いた関数まとめ
各々の関数についてまとめる。基本的にはArduino Referenceで説明されている。
const int SW = 7; //SWを7番pinに設定 const int LED = 13; //LEDを13番pinに設定
変数を読み取り専用の変数として定義するもの
不変の値を設定したい時にconstを用いると良い。
pinMode(LED,OUTPUT); pinMode(SW, INPUT); //pinMode(pin番号, OUTPUT / INPUT / INPUT_PULLUP); //戻り値:なし
pinの動作を入力(INPUT, INPUT_PULLUP)か出力(OUTPUT)に設定する関数
入力には以下の2種類ある。
INPUT:普通の入力
INPUT_PULLUP:マイコン内部のプルアップ抵抗を利用する(回路簡素化できる)
digitalRead(SW); //digitalRead(pin番号); //戻り値:HIGH/LOW
指定したpinの値を読み取る関数
5Vボードでは,3V以上の電圧がかかるとHIGH,1.5V以下の電圧がかかるとLOWとなる。
3.3Vボードでは,2V以上の電圧がかかるとHIGH,1V以下の電圧がかかるとLOWとなる。
digitalWrite(LED, HIGH); digitalWrite(LED, LOW); //digitalWrite(pin番号, HIGH / LOW); //戻り値:なし
指定したpinにHIGHかLOWを設定する関数
基本的には,HIGH=5V,LOW=0Vだが,3.3VのボードではHIGH=3.3Vと設定される。
delay(1000); //delay(時間[単位はms]); //戻り値:なし
指定した時間だけプログラムを止める関数
ここで,設定する時間はunsigned long型である。