encoder rotativo recuperato da mouse

In tutti i casi ti scusiamo z3us :grin:

A parte il trovare la ruota tonda bella e che fatta (che spesso non dispiace), guarda quanto è bello ed interessante scambiarsi opinioni e studiare teoricamente le cose.
E' anche uno dei pochi, se non l'unico mio post, dove non si polemizza o si va OT !
Quasi non ci credo.

Comunque grazie mille della segnalazioni appena posso ci do un occhio per capire quanto è diverso come approccio da quello che stiamo utilizzando.

@lesto
Tornando a noi per ricavare i tempi avevo pensato di giocare a questo modo :

Interrupt 0 Rising e Falling su PD2 gestiti in questa maniera
le variabili che ricavano i timing sono volatile unsigned long

void interruptEncoderRising()  
{     
  
  long currentmicros = micros();
  // se capita durante l'overflow somma i microsecondi precedenti
  if(currentmicros < tmp_micros)
  {
   pulse_intervall = ulongMaxVal - tmp_micros + currentmicros;
  }
  else
  {
     pulse_intervall = currentmicros - tmp_micros;
  }
  tmp_micros = currentmicros ;
 
  if(PIND&3)
    pulse++;
  else
    pulse--;
}

void interruptEncoderFalling()  
{         
  long currentmicros = micros();  
  if(currentmicros < tmp_micros)
  {
    pulse_intervall = ulongMaxVal - tmp_micros + currentmicros;
  }
  else
  {
    pulse_duration = currentmicros - tmp_micros;
  }
  tmp_micros  = 0;
}

Però come dicevi tu acquisire i dati cosi a muzzo, non serve a nulla, ci sarebbe da acquisire almento un migliaio di campioni e fare la media, ma soprattutto mi servirebbe di avere un motore che fà girare l'encoder ad un a velocità abbastanza costante, altrimenti serve a poco mi sà.

Quindi dovrei acquisire la media di mille campioni di una rotazione costante ad esempio di 1500rpm ?
Ma mi è venuto un dubbio ,na volta ricavati cosa ci faccio ? :grin: :grin: :grin: