【Arduino】LEDをボタンで光らす

LED

はじめに

ボタンを押すごとに順番に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)
}

結果

ボタンを押しているところ

ボタンを押すごとに色が変わりました!是非皆さんもやってみてください!

押すごとに赤→黄→緑に順番に光るだけですが、思い通り動くと楽しいです。

チャタリング防止を入れないと、カウントが正しくされず、順番通り光りませんでした。。

コメント

タイトルとURLをコピーしました