一瞬(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 件のコメント:
コメントを投稿