2015年10月8日木曜日

チャタリング防止/Arduino

オムロン(OMRON)さんのリミットスイッチでチャタリングが起きた為
一瞬(10ms以内)の切り替わりは対応しないようにしました。
もっと簡単な方法があるはず。

int LIMITSWITCH_IN = 2;
boolean limitSwitchBoo;
int CHATTERING_TIME = 10;
unsigned long chatteringTimeStamp = millis();
unsigned long nowMillis;

void setup() {
  limitSwitchBoo = digitalRead(LIMITSWITCH_IN);
  Serial.begin(9600);
  pinMode(LIMITSWITCH_IN, INPUT);
}

void loop() {
  nowMillis = millis();
  //最低10ms経っていないと受け付けない。
  if ((nowMillis - chatteringTimeStamp) > CHATTERING_TIME) {
    //【LOW】HIGHからLOWに切り替わった
    if ((limitSwitchBoo == HIGH) && (digitalRead(LIMITSWITCH_IN) == LOW)) {
      limitSwitchBoo = LOW;
      chatteringTimeStamp = nowMillis;
      limitLowAction();
      //【HIGH】LOWからHIGHに切り替わった
    } else if ((limitSwitchBoo == LOW) && (digitalRead(LIMITSWITCH_IN) == HIGH)) {
      limitSwitchBoo = HIGH;
      chatteringTimeStamp = nowMillis;
      limitHighAction();
    }
  }
}

void limitLowAction() {
  Serial.println("LOW");
}

void limitHighAction() {
  Serial.println("HIGH");
}

0 件のコメント:

コメントを投稿