読者です 読者をやめる 読者になる 読者になる

n-hirokiのプログラミング軌跡

プログラミングのメモ

Arduino LEDとボタン

n-hirokiです。

ボタンとLEDを使った簡単なプログラミングを行います。

 

用意するもの

  ・ブレッドボード

  ・ジャンパー線

  ・10kΩの抵抗

  ・発光ダイオード(LED)

  ・タクトスイッチ

  ・Arduino UNO

  ・ArduinoとPCをつなぐUSBケーブル

 

 

1、ボタンを押した時にLEDを点灯させる

  Cord

  //ボタンが押されている間、LEDを点ける

  const int LED = 13; //LEDが接続されているPIN番号
  const int BUTTON = 7; //ボタンが接続されているピン番号

  int val = 0; //入力ピンの状態の記憶用変数

  void setup() {
    // put your setup code here, to run once:
    pinMode(LED, OUTPUT); //LED(13番ピン)の出力設定
    pinMode(BUTTON, INPUT); //BUTTON(7番ピン)の入力設定
  }

  void loop() {
    // put your main code here, to run repeatedly:
    val = digitalRead(BUTTON); //入力の状態を読み取り、変数valに格納

    //ボタンが押されているか?
    if(val == HIGH){
      digitalWrite(LED, HIGH); //LEDを点灯させる
    }else{
      digitalWrite(LED, LOW); //LEDをオフ
    }

  }

 

ジャンパー線の色が限られていて規則性がないですm(_ _)m

回路写真(実行) 

f:id:n-hiroki_zero:20160817182043j:image

f:id:n-hiroki_zero:20160817182042j:image

 

ただスイッチを押している時だけだとあまり使用用途がないかもしれないので、次はスイッチを押したら点灯が切り替わるプログラミングをやります。

 

 

2、ボタンを押した時にLED切り替え

Cord

  const int LED = 13; //LEDが13番ピンに接続されている
  const int BUTTON = 7; //ボタンが7番ピンに接続されている

  int val = 0; //入力の状態を格納する変数
  int old_val = 0; //valの一つ前の状態を格納する変数
  int state = 0; //LEDの状態を格納する変数(0・・オフ、1・・オン)

  void setup() {
    // put your setup code here, to run once:
    pinMode(LED, OUTPUT); //LED(13番ピン)の出力設定
    pinMode(BUTTON, INPUT); //BUTTON(7番ピン)の入力設定
  }

  void loop() {
    // put your main code here, to run repeatedly:
    val = digitalRead(BUTTON); //BUTTONの入力読み取り、valに格納

    //変化チェック
    if*1{
      state = 1 - state;
      delay(10);
    }
    old_val = val; //val更新
    if(state == 1){
      digitalWrite(LED, HIGH); //LEDオン
    }else{
      digitalWrite(LED, LOW); //LEDオフ
    }
  }

 

回路は先ほどと同じで大丈夫です!

実行してみたらわかりますが、LEDがオフの時にボタンを押すとLEDがオンになり、LEDオンの時にボタンを押すとLEDがオフになります。

部屋の電気を点ける時と同じような動きですね!

 

ただ、連打したりするとあまりうまく動かないかもしれません。

「バウンシング」という現象が原因です。

 

バウンシングとは、

ボタンの仕組みはバネの力で離れている2つの金属片が、ボタンが押された時に接触して電気が流れる仕組みです。その金属片がぶつかった瞬間わずかに跳ね返って不安定な状態になることをバウンシングという。

 

 

プログラム中のdelayを長めに使うとバウンシングを解消できます。

バウンシングは10〜50ミリ秒間程度発生するケースが多いのでその分delayをかけてあげればバウンシングは解消します。

なので、delayの時間を変えて試してみてください。

 

 

今回はこの2点で終わりですが、これ以外にも様々なプログラムの可能性がたくさんあります。なのであなたも色々試してみたください!!

*1:val == HIGH) && (old_val == LOW