Allora ho letto attentamente i consigli di tutti, ho riordinato le idee e ho deciso di fare cosi :
A) usare questo codice
#define P_SENSOR 2
volatile int rev=0;
unsigned long tmrLast;
void setup()
{
Serial.begin(9600);
pinMode(P_SENSOR,INPUT);
attachInterrupt(digitalPinToInterrupt(P_SENSOR), contaImpulsi, RISING);
tmrLast = millis();
}
void loop()
{
if ( millis() - tmrLast >= 1000 ) {
noInterrupts();
Serial.println(rev);
tmrLast = millis();
interrupts();
}
}
void contaImpulsi()
{
rev++;
}
consigliatomi da docdoc
B) dato che il sensore a infrarossi poteva essere una variabile poco controllabile ho tolto il sensore infrarosso e ho attaccato una calamita ad dischetto e messo un banale sensore ad effetto hall, quindi il dubbio su cosa faccia il sensore non lo ho più.
Risultato:
- se giro il rotore manualmente ok segna un giro al secondo il che mi ha fatto ben sperare.
- se accendo il motore mi da 300 giri al secondo che è palesemente sbagliato considerando che il sensore effetto hall ha anche un Led di segnalazione e il Led palesemente sfarfalla, ma con o senza Led quel motore cc tipo quello delle macchinette mini 4wd palesemente non può giare a 300 giri al secondo a carico, con quel carico (la calamita che ho trovato non era esattamente dal peso trascurabile per il motore).
Morale non so che dire ho guardato in lungo e in largo internet e tutti più a meno usano un codice simile e o un sensore effetto hall o un IR e indifferentemente non hanno Arduino che sovrastima i giri per l hall e tiri numeri a caso per l'IR.
Quindi boh sto per deludermi e mollare non so proprio come risolvere, deve essere qualcosa di macroscopico che sbaglio che è scontata per tutti ma non so cosa, il circuito è semplificato all' osso il codice ho usato il vostro e ho cambiato sensore
:'(.