Arduinoでスイッチ製作 #3

Arduinoでスイッチ製作 part2の続きです。今回は押しボタンスイッチを押したときに起こるノイズ(チャタリング)を防ぐためのコードを追加してみようと思います。

チャタリングとは、前回ふれたとおりスイッチが半接触状態になることによってON/OFFが激しく切り替わりそれがノイズとなってスイッチの正常な動作を妨げてしまうことです。

ここで前回のソースコードを見てみます。

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;
  }
}

ボタンが押された際に数100ミリ秒入力を受け付けない時間を設けることでノイズ対策を実装したいと思います。修正後のコードは次のようになります。

int state = 0;

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

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

if文のあとにdelay()関数を追加しました。一度入力されると、100ミリ秒の間入力を無視するという力技なのですが、このタイプの問題解決法にありがちな連打されたときの動作もだいぶ思い通りに動くためこれで良し!ということにしました。

タクトスイッチを使う人もいると思うので追記

タクトスイッチは半接触(チャタリング)の状態が今回使っているスイッチよりも短いと考えられるため100ミリ秒に設定してあるdelay()を短くして調整する必要があります。追記終わり。

 

ノイズが高周波の信号なので、回路でローパスフィルターを組んで実装してもよいかもしれません。

次回はようやくパソコンとの接続のところに入れそうです。

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