【Arduino#4】ボタンスイッチとLED回路(明暗3段階に変化)
前回のボタンスイッチ/LEDの回路に引き続き,ボタンスイッチを用いてLEDのの明るさを調節する回路を作る。
順序として,単純にLEDの明るさを設定可能な回路を作成した後に,スイッチと組み合わせ,3段階でスイッチング可能なLED回路を作成する。
1. 必要素子
〇LEDの明るさ設定する簡易回路
- ブレッドボード
- 抵抗(10kΩ)
- LED
- ジャンパー線 2本
〇スイッチを用いた明るさ調節回路
- ブレッドボード
- 抵抗(10kΩ) 2個
- LED
- ジャンパー線 5本
- ボタンスイッチ(以下,SW)
2. 配線図
〇LEDの明るさ設定する簡易回路
〇スイッチを用いた明るさ調節回路
3. スケッチ
〇LEDの明るさ設定する簡易回路
const int LED = 9;//pin9にLED接続 int light = 0;//明るさの変数 void setup() { pinMode(LED, OUTPUT);//LEDpinを出力に設定 } void loop() { light = 0; //LED暗 analogWrite(LED, light); //PWM波を出力(デューティ比=0%) delay(1000); light = 128; //LED中 analogWrite(LED, light);//PWM波を出力(デューティ比=50%) delay(1000); light = 255; //LED明 analogWrite(LED, light);//(PWM波を出力デューティ比=100%) delay(1000); }
〇スイッチを用いた明るさ調節回路
const int LED = 9;//LEDを13番pinに設定 const int SW = 7;//プッシュボタンを7番pinに設定 int val = 0;//7番pinから読み込んだ値を格納 int val_old = 0;//古いvalを格納 int state = 0;//SWの状態を格納 int light = 0;//明るさの変数 void setup() { pinMode(LED,OUTPUT);//LEDpinを出力に設定 pinMode(SW, INPUT);//SWpinを入力に設定 } void loop() { val = digitalRead(SW);//7番pinからHIGH/LOW読込 //SWのON/OFFでstateの状態を変更 if((val == HIGH)&&(val_old == LOW)){ if(state==0){ state = 1 ;//state=0 → state=1 }else if(state==1){ state = 2 ;//state=1 → state=2 }else{ state = 0 ;//state=2 → state=0 } delay(10);//SWのバウンシングを防ぐために間隔設定 } val_old = val;//1つ前のvalを格納 //stateの状態によって明るさ設定 if(state == 1){ light = 255; //LED明 analogWrite(LED, light);//PWM波を出力(デューティ比=100%) }else if(state == 2){ light = 128; //LED中 analogWrite(LED, light);//PWM波を出力(デューティ比=50%) }else{ light = 0; //LED暗 analogWrite(LED, light); //PWM波を出力(デューティ比=0%) } }
4. スケッチで用いた関数まとめ
各々の関数についてまとめる。基本的にはArduino Referenceで説明されている。
const int LED = 9; const int SW = 7;
変数を読み取り専用の変数として定義するもの
不変の値を設定したい時にconstを用いると良い。
pinMode(LED,OUTPUT); pinMode(SW, INPUT); //pinMode(pin番号, OUTPUT / INPUT / INPUT_PULLUP); //戻り値:なし
pinの動作を入力(INPUT, INPUT_PULLUP)か出力(OUTPUT)に設定する関数
入力には以下の2種類ある。
INPUT:普通の入力
INPUT_PULLUP:マイコン内部のプルアップ抵抗を利用する(回路簡素化できる)
analogWrite(LED, light); //analogWrite(pin番号, デューティ比に対応する値(0~255)); //戻り値:なし
指定したpinからPWM波を出力する関数
ここで,指定するpinはDigital pinの~がついているpin(3,5,6,9,10,11番pin)とする必要がある。
また,デューティ比に対応する値が0であれば0Vを出力,255であれば5V(3.3V)を出力する電圧源と等しくなる。
delay(1000); //delay(時間[単位はms]); //戻り値:なし
指定した時間だけプログラムを止める関数
ここで,設定する時間はunsigned long型である。
digitalRead(SW); //digitalRead(pin番号); //戻り値:HIGH/LOW
指定したpinの値を読み取る関数
5Vボードでは,3V以上の電圧がかかるとHIGH,1.5V以下の電圧がかかるとLOWとなる。
3.3Vボードでは,2V以上の電圧がかかるとHIGH,1V以下の電圧がかかるとLOWとなる。