回答編集履歴
3
記載プログラムの修正
test
CHANGED
@@ -50,11 +50,17 @@
|
|
50
50
|
|
51
51
|
void rotary_changedPin(void){
|
52
52
|
|
53
|
-
|
53
|
+
//
|
54
|
+
|
55
|
+
bool sigPinA = digitalRead(rot_pinA);
|
56
|
+
|
57
|
+
bool sigPinB = digitalRead(rot_pinB);
|
58
|
+
|
59
|
+
|
54
60
|
|
55
61
|
//A相、B相共にGNDレベルなら
|
56
62
|
|
57
|
-
if(!
|
63
|
+
if(!sigPinA && !sigPinB){
|
58
64
|
|
59
65
|
|
60
66
|
|
@@ -84,9 +90,9 @@
|
|
84
90
|
|
85
91
|
//A相、B相の状態を記録
|
86
92
|
|
87
|
-
oldPinA =
|
93
|
+
oldPinA = sigPinA;
|
88
94
|
|
89
|
-
oldPinB =
|
95
|
+
oldPinB = sigPinB;
|
90
96
|
|
91
97
|
}
|
92
98
|
|
2
記載プログラムの間違い修正
test
CHANGED
@@ -33,6 +33,8 @@
|
|
33
33
|
//割り込みの設定(A相割り込みもB相割り込みも同一処理で可能)
|
34
34
|
|
35
35
|
wiringPiISR(rot_pinA, INT_EDGE_BOTH, rotary_changedPin);
|
36
|
+
|
37
|
+
wiringPiISR(rot_pinB, INT_EDGE_BOTH, rotary_changedPin);
|
36
38
|
|
37
39
|
//
|
38
40
|
|
1
チャタリング対策について、追記
test
CHANGED
@@ -89,3 +89,19 @@
|
|
89
89
|
}
|
90
90
|
|
91
91
|
```
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
なお、チャタリング対策については、A相、B相ともに、シグナル線を、
|
96
|
+
|
97
|
+
・10Kのプルアップ
|
98
|
+
|
99
|
+
・0.01uFのコンデンサでGNDに接続
|
100
|
+
|
101
|
+
で、かなり良好な結果がでるかと思います。
|
102
|
+
|
103
|
+
立ち上がりのエッジが気になるなら、プルアップ抵抗を4.7Kなど、小さくするとオシロでの見た時のシグナルは綺麗に見えてきます。ただ、CPUのトリガーエッジに引っかかるタイミングは、あまり変わらないので、このあたりは、綺麗な方形波を目指すことも無いかと?思います。
|
104
|
+
|
105
|
+
|
106
|
+
|
107
|
+
|