回答編集履歴

3

記載プログラムの修正

2015/11/03 04:45

投稿

ItoTomonori
ItoTomonori

スコア1283

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(!digitalRead(rot_pinA) && !digitalRead(rot_pinB)){
63
+ if(!sigPinA && !sigPinB){
58
64
 
59
65
 
60
66
 
@@ -84,9 +90,9 @@
84
90
 
85
91
  //A相、B相の状態を記録
86
92
 
87
- oldPinA = digitalRead(rot_pinA);
93
+ oldPinA = sigPinA;
88
94
 
89
- oldPinB = digitalRead(rot_pinB);
95
+ oldPinB = sigPinB;
90
96
 
91
97
  }
92
98
 

2

記載プログラムの間違い修正

2015/11/03 04:45

投稿

ItoTomonori
ItoTomonori

スコア1283

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

チャタリング対策について、追記

2015/11/03 04:43

投稿

ItoTomonori
ItoTomonori

スコア1283

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
+