Rpm con encoder rotativo.

Ciao a tutti, modificando il codice qui sotto sono riuscito a fare un contagiri calettando al motore un semplice encoder da 3 euro, però non riesco a fare contare gli rpm.

#include <Encoder.h>
#include "DualVNH5019MotorShield.h"
DualVNH5019MotorShield md;
const int PIN_ENCODER_PHASE_A=18;
const int PIN_ENCODER_PHASE_B=19;

int i;
Encoder encoder(PIN_ENCODER_PHASE_A, PIN_ENCODER_PHASE_B);
void setup() {
  md.setM1Speed(60);
 
  // put your setup code here, to run once:
Serial.begin(9600);

}

void loop() {
 unsigned long encoderNewPos= encoder.read() ;
unsigned long time = millis();
  
  Serial.println ( encoderNewPos/60 ) ;
 //
 Serial.print("rpm ");

              //questo è il codice che non funziona
Serial.println( (time*60000 / encoderNewPos )^-1) ;

  
 delay (1000);
  
  // put your main code here, to run repeatedly:

}

.
La libreria in più che vedete è quella della motorshield pololu.
Credo che il problema si risolva con millis, suggerimenti?

Non vedo dove c'è l'impostazione del parametro pulse per revolution dell'encoder , che tipo di encoder hai montato?

Ti riporto quello che c'è scritto sul sito che ho comprato "Questo modulo per Arduino è un encoder rotativo.
La scheda fornisce 2 segnali digitali in uscita in quadratura, 1 segnale digitale relativo al comando a pulsante e 20 impulsi a giro.
"
Serial.println ( encoderNewPos/60 ) ;

grazie a questa conto i giri... ma fa sempre una addizione, che è principalmente ciò che mi serve... Vorrei anche gli RPM, quindi basterebbe fargli contare un tot di impulsi in un determinato intervallo di tempo. Dove dovrei cercare per imparare? Mi sono sbattuto abbastanza, è che sono neofita della programmazione. Potresti aiutarmi?
Ho visto che forse sarebbe più adeguato un encoder ottico ma intanto ho questo e vorrei sfruttarlo. Ciao, grazie.

#include <Encoder.h>
#include "DualVNH5019MotorShield.h"
DualVNH5019MotorShield md;

const int PIN_ENCODER_PHASE_A=18;
const int PIN_ENCODER_PHASE_B=19;

Encoder encoder(PIN_ENCODER_PHASE_A, PIN_ENCODER_PHASE_B);



void setup() {
  md.setM1Speed(45);
  //
 
  // put your setup code here, to run once:
Serial.begin(9600);

 

}

void loop() {
float encoderNewPos= encoder.read() ;

 
  
 //read interrupt count every second
  
    Serial.println ( encoderNewPos/60 ) ;
   
   Serial.println ( (((encoderNewPos/60))/(millis()))*60000 ) ;
   delay (3000);
  if ((encoderNewPos/60)>50)
  { md.setM1Speed(0);
  delay (2000000);
  }
 //
 
}

Alla fine sono riuscito... Lascio il codice se magari serviva a qualcuno. (c'è pure un ciclo if che fa fermare il motore dopo un tot di giri). Rimane però il problema che è una semplice media, non conta gli rpm istantanei. Mi servirebbe un'istruzione che rileva solamente gli input dell'ultimo secondo. Qualcuno può indicarmi la strada?