Arduinoのサンプルプログラム

Arduino-スイッチの使い方

当記事では、Arduinoでスイッチを使う方法を詳しく解説します。

ArduinoのDigital I/O(デジタル入出力)の関数を使ったプログラムで、スイッチの入力状態を読み取ります。

なお、その他のArduino関数・ライブラリについては、以下の記事をご覧ください。

スイッチはどんな電子部品?

スイッチは一般家庭でも多く使われており、照明の点灯・消灯やテレビ、エアコンなどの電化製品で電源の入切、メニューの選択で普段から使っていると思います。

スイッチを電子部品として考えると、以下のように「状態が切り替わるスイッチ」と「状態が戻るスイッチ」に大きくわけられます。

スイッチの種類
  1. 状態が切り替わるスイッチ
    • トグルスイッチ
    • スライドスイッチ
    • DIPスイッチ
    • ロータリースイッチ
  2. 状態が戻るスイッチ
    • タクトスイッチ
    • 押しボタンスイッチ

つまり、「状態が切り替わるスイッチ」は一度スイッチをONするとONの状態のまま、OFFにすればOFFの状態のままになります。「状態が戻るスイッチ」は、押している間だけONになり、押すのをやめてしまうとOFFになります。

当記事では、タクトスイッチがブレッドボードにそのまま差し込めて使えるので、タクトスイッチを例にしてスイッチで使用するサンプルプログラムを解説していきます。

サンプルプログラム(サンプルスケッチ)

スイッチの入力状態を読み取り

用意するもの
  1. タクトスイッチ
  2. 抵抗1kΩ
  3. Arduino Uno
  4. USBケーブル
  5. ブレッドボード
  6. ジャンパ線
  7. PC(プログラム書き込み・シリアルモニタ表示)

void setup() {
  pinMode(0, INPUT);//0番ピンを入力に設定
  Serial.begin(9600);//シリアル通信を9600bpsで初期化
}

void loop() {
  boolean input;

  input = digitalRead(0);//0番ピン(スイッチ)の入力状態をinputに代入
  Serial.println(input);//「input」を送信、改行
  delay(1000);//1000msec待機(1秒待機)
}

サンプルプログラムでは、0番ピンに接続されたタクトスイッチの入力状態をシリアルモニタに表示します。

スイッチはプルアップされているので、スイッチが押されていないOFFの時は「1」、スイッチが押されているONの時は「0」が表示されます。

スイッチの入力状態を読み取り(プルアップ入力)

用意するもの
  1. タクトスイッチ
  2. Arduino Uno
  3. USBケーブル
  4. ブレッドボード
  5. ジャンパ線
  6. PC(プログラム書き込み・シリアルモニタ表示)

void setup() {
  pinMode(0, INPUT_PULLUP);//0番ピンをプルアップ入力に設定
  Serial.begin(9600);//シリアル通信を9600bpsで初期化
}

void loop() {
  boolean input;

  input = digitalRead(0);//0番ピン(スイッチ)の入力状態をinputに代入
  Serial.println(input);//「input」を送信、改行
  delay(1000);//1000msec待機(1秒待機)
}

サンプルプログラムでは、0番ピンに接続されたタクトスイッチの入力状態をシリアルモニタに表示します。

デジタル入出力ピンの設定を「pinMode(0, INPUT_PULLUP)」とすることで、マイコン内部のプルアップ抵抗を使用することができるので、別途プルアップ抵抗を接続する必要がありません。

「スイッチの入力状態を読み取り」のサンプルプログラムと同様、スイッチはプルアップされているので、スイッチが押されていないOFFの時は「1」、スイッチが押されているONの時は「0」が表示されます。

スイッチを入力してLED点灯

用意するもの
  1. タクトスイッチ
  2. 抵抗1kΩ
  3. Arduino Uno
  4. USBケーブル
  5. ブレッドボード
  6. ジャンパ線
  7. PC(プログラム書き込み・シリアルモニタ表示)

void setup() {
  pinMode(0, INPUT);//0番ピンを入力に設定
  pinMode(13, OUTPUT);//13番ピンを出力に設定
}

void loop() {
  boolean input;

  input = digitalRead(0);//0番ピン(スイッチ)の入力状態をinputに代入

  if(input == 0) {//0番ピンのスイッチがONの場合、実行
    digitalWrite(13, HIGH);//0番ピンの出力をHIGH(5V)に設定
  }
  else {//0番ピンのスイッチがOFFの場合、実行
    digitalWrite(13, LOW);//13番ピンの出力をLOW(0V)に設定
  }
  delay(10);//10msec待機(0.01秒待機)、チャタリング対策
}

サンプルプログラムでは、0番ピンに接続されたタクトスイッチの入力状態からArduino Unoのボード上のLEDが点灯、消灯します。タクトスイッチを押すとLED点灯、離すとLED消灯になります。

スイッチを押した回数をカウント

用意するもの
  1. タクトスイッチ
  2. 抵抗1kΩ
  3. Arduino Uno
  4. USBケーブル
  5. ブレッドボード
  6. ジャンパ線
  7. PC(プログラム書き込み・シリアルモニタ表示)

int count = 0;

void setup() {
  pinMode(0, INPUT);//0番ピンを入力に設定
  Serial.begin(9600);//シリアル通信を9600bpsで初期化
}

void loop() {
  if(digitalRead(0) == 0) {//0番ピンのスイッチがONの場合、実行
    count = count + 1;//countに1を足す
    Serial.print("回数:");//「回数:」を送信
    Serial.println(count);//「count」を送信、改行
    while(digitalRead(0) == 0) {//0番ピンのスイッチがONの場合、繰り返す
      delay(10);//10msec待機(0.01秒待機)、チャタリング対策
    }
  }
}

サンプルプログラムは、タクトスイッチを押した回数をシリアルモニタに表示します。

なお、スイッチのチャタリング対策として、wileループの中に「 delay(10)」を加えています。チャタリングによってスイッチON時にON/OFFが繰り返されるので、時間を遅延させることでチャタリングを回避しています。

チャタリング対策のプログラムは他にも色々なやり方があり、回路図上でチャタリング防止回路を追加することでもチャタリングを回避することがあります。詳しいチャタリング対策の方法については別の記事で詳しく解説する予定です。

テキストのコピーはできません。