I've modified my code and it works ok, but sometimes I get false readings too - say for 20 pulses of CW, I will have 2-3 pulses of CCW and vise versa
Code:STATE: 'WAIT FOR ENCODER TO BE MOVED (STATE CHANGE) 'Lcdout $Fe, $1, "WAIT..." , DEC ENX, " ", DEC ENY X=ENX Y=ENY PAUSE 1 X1=ENX Y1=ENY IF X<>X1 OR Y<>Y1 THEN GOTO SOMELOOP GOTO STATE SOMELOOP: 'COUNTER LOOP FOR PULSE LENGTH COUNTING IF ENX=1 THEN X1IN=X1IN+1 'X INCREMENT IF ENY=1 THEN Y1IN=Y1IN+1 'Y INCREMENT IF ENX=0 and ENY=0 THEN GOTO ANALYZE 'EXIT AND COMPARE LENGTHS PAUSE 1 GOTO SOMELOOP ANALYZE: 'DETERMINE DIRECTION AND INCREMENT CORRESPONDING VARIABLE IF X1IN>Y1IN THEN CCW=CCW+1 ELSE CW=CW+1 ENDIF LCDOUT $FE, $1, "RAW", DEC Y1IN, " ", DEC X1IN, " " LCDOUT $FE, $C0, "VAL ", DEC CCW, " ", DEC CW, " " PAUSE 1 X1IN=0 'RESET VARIABLES Y1IN=0 GOTO STATE




Bookmarks