Arduinoでスイッチ製作 #2

今回は前回製作した押しボタンスイッチをPCに接続して通信するための前準備を行いたいと思います。

スイッチを動かすためのスケッチを以下のようにコーディングしてみました。

void setup() {
  pinMode(2,INPUT);
  Serial.begin(115200);
}

void loop() {
  if(digitalRead(2) == HIGH){
    Serial.write("1");
  }
  else if(digitalRead(2) == LOW){
    Serial.write("0");
  }
}

このスケッチでのスイッチの動作をまとめると

  • スイッチを押している間ずっと信号(”1″)が流れ続ける(それ以外のときは(”0″)が流れ続ける)
  • パソコンとの通信にはシリアル通信を使用

これを次のように改善したいと思います。

  • スイッチを1度押すと1回だけ信号を送るようにする(押しっぱなしのときに信号を流しっぱなしにしない)

これを判別するためにスイッチの状態を表す変数stateを用意して実装してみます。

int state = 0;

void setup() {
  pinMode(2,INPUT);
  Serial.begin(115200);
}

void loop() {
  if(digitalRead(2) == HIGH && state == 0){
    Serial.write("1");
    state = 1;
  }
  else if(digitalRead(2) == LOW && state == 1){
    state = 0;
  }
}

スケッチを次のように書き換えることで、stateが0の時しかスイッチが反応しないようにして、なおかつ、stateが1の時に信号が流れ続けないようにしています。

これで仕様上では動作するようになりましたが、実はもう一つ問題があります。

mono06928966-150225-02

今回使用しているスイッチは大きめのサイズなのでスイッチを押す時と離す時に半接触の状態(チャタリングと呼ばれるようです)があります。

半接触の状態のときはON/OFF(電圧のHIGH/LOW)が激しく入れ替わり、これがノイズとなるのでスイッチが正常に動作しません。

次回はチャタリングが起きないようにスイッチを改善してみようと思います。

 

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Scroll to top