c = rgData.length var pA = 0 // previos encoder A value var iA = 0 // last encoder A rising edge var cnt = 0 // starting step count for(var i = 0; i < c; i++){ fA = 1&(rgData[i]<<0) // live encoder-A signal on channel DIO = 0 fB = 1&(rgData[i]<<1) // live encoder-B signal on channel DIO = 1 if(fA==1 && pA==0){ // encoder A rising edge (A_now = 1 && A_previous = 0) if(fB[i]==0){ // encoder B level at time of A-rising edge indicates direction //cnt++ cnt[i] = 1 } else if(fB[i]==1){ // encoder B level at time of A-rising edge indicates direction //cnt-- cnt[i] = 0 } for(var j = iA; j < i; j++){ // assign value (step count) to previous A cycle rgValue[j] = cnt rgFlag[j] = 1 } iA = i } pA = fA } for(var j = iA; j < c; j++){ // fill the remaining samples rgValue[j] = cnt[j] rgFlag[j] = 1 }