回答編集履歴

1

サンプル追記

2022/10/12 23:35

投稿

thkana
thkana

スコア7659

test CHANGED
@@ -2,3 +2,35 @@
2
2
  レベルでなくエッジで考える話でしょう。
3
3
  ホール素子ならチャタリングもないでしょうから、ホール素子の出力の立ち上がりまたは立ち下がりエッジで割り込みを掛けることにすれば、自分でエッジ検出をする必要もないです。
4
4
  割り込みのかかった回数を一秒間数えればよいように思います。
5
+
6
+ ---
7
+ 単純に割り込み(H->Lへの変化)の回数を数えるサンプル
8
+ ```Arduino
9
+ const int INP = 3; //入力ピン(UNOでは2と3がピン割り込み対応)
10
+
11
+ unsigned long t0;
12
+ volatile int cnt;
13
+
14
+ void countInc() {
15
+ cnt++;
16
+ }
17
+
18
+ void setup() {
19
+ Serial.begin(115200);
20
+ pinMode(INP, INPUT_PULLUP); //PULLUPは必要に応じて
21
+ attachInterrupt(digitalPinToInterrupt(INP), countInc, FALLING);
22
+ t0 = millis();
23
+ }
24
+ void loop() {
25
+ unsigned long t = millis();
26
+ if (t - t0 >= 1000) {
27
+ Serial.print(t);
28
+ Serial.print(':');
29
+ noInterrupts(); //cntの操作の競合を避けるため割り込み禁止
30
+ Serial.println(cnt);
31
+ cnt = 0;
32
+ interrupts();//割り込み再開
33
+ t0=t;
34
+ }
35
+ }
36
+ ```