はじめに
ボタンを押すごとに順番にLEDを点灯させます。
ボタン入力はプルアップでの入力です。ボタンを押したときlowになります。
(ボタンを押したときにhighになるプルダウンのほうが分かりやすいのですが、回路短縮のため今回はプルアップで作成しました。プルダウンは抵抗が必要となります。)
LEDは3つ使います。赤、黄、緑色を準備しました。
ボタンはチャタリングを防止したプログラムにします。
ポイント
・プルアップでの入力
・switch-case文で状態切り替え
・チャタリング防止関数を作成
使用部品
・Arduino uno
・LED 3個(赤、黄、緑)
・抵抗 1kΩ 3個
・タクトスイッチ 1個
・ブレッドボード、配線 5本、ジャンパーピン4本
接続図
全体図
画面切れていますが、黄色の配線はブレッドボードのー(マイナス)ラインにつながっています。
LEDは左側が+(プラス)です。
-(マイナス)側はブレッドボードのマイナスラインにつなげています。
Arduino側の接続
プログラム
void setup() {
pinMode(2,INPUT_PULLUP); //タクトスイッチをD2に設定(プルアップ)
pinMode(11,OUTPUT); //D11をデジタル出力に設定
pinMode(12,OUTPUT); //D12をデジタル出力に設定
pinMode(13,OUTPUT); //D13をデジタル出力に設定
}
int i=0; //i初期値0
void loop() {
if(chtsw(2)==LOW) //chtswはチャタリング防止関数呼び出し
i=i+1; //スイッチ押すごとにiを+1する
if(i>=4)
i=0; //4を超えると0に戻す
switch(i){ //iの条件でランプの状態を決める
case 0: //すべてoff
digitalWrite(11,LOW); //赤:off
digitalWrite(12,LOW); //黄:off
digitalWrite(13,LOW); //青:off
break;
case 1: //赤だけon
digitalWrite(11,HIGH); //赤:on
digitalWrite(12,LOW); //黄:off
digitalWrite(13,LOW); //青:off
break;
case 2: //黄だけon
digitalWrite(11,LOW); //赤:off
digitalWrite(12,HIGH); //黄:on
digitalWrite(13,LOW); //青:off
break;
case 3: //青だけon
digitalWrite(11,LOW); //赤:off
digitalWrite(12,LOW); //黄:off
digitalWrite(13,HIGH); //青:on
break;
}
}
boolean chtsw(byte dx){ //チャタリング防止関数
boolean tsw = digitalRead(dx); //デジタル入力の状態をtswに格納(ここでon)
while(tsw==digitalRead(dx)); //tswとデジタル入力が同じなら
delay(300); //0.3秒後に
return !tsw; //tswの状態を否定演算で出す(ここでoff)
//押されて状態=false(LOW),離した状態=true(HIGH)
}
結果
ボタンを押すごとに色が変わりました!是非皆さんもやってみてください!
押すごとに赤→黄→緑に順番に光るだけですが、思い通り動くと楽しいです。
チャタリング防止を入れないと、カウントが正しくされず、順番通り光りませんでした。。
コメント