encoder in quadratura

eccovi il codice

#include <SoftwareSerial.h>

#define encoder 5
#define motore 3
#define pot 5

int pwm,pwmfb,posizione,err;
float vel,durata,durh,durl;

void setup()
{
pinMode(encoder,INPUT_PULLUP);
pinMode(motore,INPUT);
Serial.begin(19200);
err=0;
durata=0;
}

void loop()
{
// acquisizione del valore del pwm
posizione=analogRead(pot);
pwm=map(posizione,0,1023,100,255);
// fine acquisizione valore del pwm
// inizio del controllore
err=pwm-pwmfb;
pwm=pwm+err;
if (pwm>255) {pwm=255;}
// fine controllore

analogWrite(motore,pwm);

// comincio la procedura per acquisire il dato dall'encoder
durh = pulseIn (encoder, HIGH);
durl = pulseIn (encoder, LOW);
durata=durl+durh;
// fine acquisizione velocità

vel=10000/durata;
Serial.println(vel);
vel=vel*100;
pwmfb=map(vel,0,98,0,255);
}