スイッチを押す

スポンサーリンク
スポンサーリンク

スイッチ

スイッチを押すとカウントが増えるやつ。

スポンサーリンク

とりあえずやる

こんな感じでつなぎ

int count = 0;

void setup() {
  pinMode(9, INPUT_PULLUP);
  Serial.begin(9600);
}

void loop() {

  if (digitalRead(9) == LOW) {
    count++;
    Serial.print(count);
    Serial.println();
  }
}

こんなコードを書き 、スイッチをポチッと押すと

12:09:51.333 -> 1
12:09:51.333 -> 2
12:09:51.333 -> 3
~略~
12:09:51.437 -> 757
12:09:51.437 -> 758
12:09:51.437 -> 759

値がすっ飛ぶ。スイッチを離すまでに、次のloopが来てしまうからこういうことになるみたい。(cf.チャタリング)。よろしくないので適当に遅延を入れる。

スポンサーリンク

遅延入れる

int count = 0;

void setup() {
  pinMode(9, INPUT_PULLUP);
  Serial.begin(9600);
}

void loop() {

  if (digitalRead(9) == LOW) {
    count++;
    Serial.print(count);
    Serial.println();
    delay(200);
  }
}

そうするとまぁ

12:41:46.180 -> 1
12:41:47.033 -> 2
12:41:47.924 -> 3
12:41:48.836 -> 4
12:41:49.723 -> 5

ポチッぐらいだと上手くいく。これがポーッチとかポチポチポチとかだと押した回数とカウントが一致しない。

こんな。ポーッチとかポチポチポチとかにも対応したい。

スポンサーリンク

ボタンを離すとカウントアップ

int count = 0;

void setup() {
  pinMode(9, INPUT_PULLUP);
  Serial.begin(9600);
}

void loop() {

  if (digitalRead(9) == LOW) {
    while (digitalRead(9) == LOW) {}
    
    count++;
    
    Serial.print(count);
    Serial.println();
    delay(10);
  }
}

押したときではなく、離した時にカウントすればいいのではと考えた。コード的に合ってるか微妙なとこだけどこう書いた。何もしないループって作っていいのかな。微妙にチャタるのでdelayも入れてみてる。

いい感じでは。

コメント

タイトルとURLをコピーしました