OSDN Git Service

[v2.0][RENC] Try to reject click-noise, may be correct ;_;
authorK.Ohta <whatisthis.sowhat@gmail.com>
Thu, 24 Oct 2013 07:50:20 +0000 (16:50 +0900)
committerK.Ohta <whatisthis.sowhat@gmail.com>
Thu, 24 Oct 2013 07:50:20 +0000 (16:50 +0900)
rencoder.c

index cf6d178..d76b972 100644 (file)
@@ -79,23 +79,33 @@ void rencoder_stop(void)
 void rencoder_count(void)
 {
    unsigned char dir = RENC_NONE;
+   unsigned char pha = RENC_PH_A;
+   unsigned char phb = RENC_PH_B;
 
-   if(RENC_PH_A != renc_state_a) {
-       if(RENC_PH_A == 1){ // A: FALL DOWN
-           if(RENC_PH_B == 0){ // B: Stable
+   /*
+    * Count sequence description of rotary-encoder:
+    * See figure of http://homepage1.nifty.com/rikiya/software/113ROTENC.htm .
+    */
+   if(pha != renc_state_a) {
+       if(pha == 1){ // A: RISE UP
+           if(phb == 0){ // B: Stable
                dir = RENC_RIGHT;
            } else {
                dir = RENC_LEFT;
            }
        }
-    } else if(RENC_PH_B != renc_state_b){
-        if(RENC_PH_B == 1){ // B: FALL DOWN
-            if(RENC_PH_A == 0){ // A: Stable
+    renc_state_a = pha;
+    //renc_state_b = phb;
+    } else if(phb != renc_state_b){
+        if(phb == 1){ // B: RISE UP
+            if(pha == 0){ // A: Stable
                 dir = RENC_LEFT;
             } else {
                 dir = RENC_RIGHT;
             }
         }
+    //renc_state_a = pha;
+    renc_state_b = phb;
     }
 
    if(dir != RENC_NONE) {
@@ -119,8 +129,6 @@ void rencoder_count(void)
    
    
 //   rencoder_up(dir);
-   renc_state_a = RENC_PH_A;
-   renc_state_b = RENC_PH_B;
 }