Salve a tutti,
premetto che ho già seguito questo post Problema con PulseIn - Software - Arduino Forum, del quale forse potrei usare il codice (ancora non ho possibilità di testarlo fisicamente) però vorrei implementarlo tramite interrupt, il che potrebbe darmi qualcosina in più in termini di precisione e velocità.
Quello che vorrei fare è la lettura in "tempo reale" dei giri al minuto di un albero; rispetto ad altri post che ho letto non ci sono di mezzo pale o quant'altro, trattasi di un classico albero cilindrico.
Il sensore è di tipo induttivo a 12 V, quando passa vicino al riferimento metallico sull'albero il segnale di Out è pari alla tensione di alimentazione, altrimenti è a zero. Naturalmente il collegamento verrà fatto in modo da vere i 5 V massimi sul pin digitale.
Partendo dalla base la mia idea sarebbe questa, senza andare a scomodare i vari Timer:
long rif;
float rpm;
int count;
void setup(){
Serial.begin(9600);
attachInterrupt(0, contatore, RISING);
long rif = 0;
rpm = 0;
count = 0;
}
void loop(){
if (millis() - rif == 1000){ // trascorso 1 secondo
rpm = count * 60; // tramite contatore () incremento counter ogni qualvolta passa da low ad hihg (quando passa davanti al riferimento), in 1 secondo e lo moltiplico per 60 per avere il dato al minuto
Serial.print("rpm: ");
Serial.println(rpm);
count = 0; //azzero il contatore
lastmillis = millis(); //cambio il riferimento con l'ultimo millis()
attachInterrupt(0, rpm_fan, FALLING); // richiamo l'interrupt.
}
}
void contatore(){
count++;
}
Potrebbe funzionare?
In loop(), oltre a questo, avrei anche la gestione di altri PIN, sia analogici che digitali, alcuni dei quali dovrebbero leggere costantemente dei sensori. Un pezzo di codice con interrupt come sopra potrebbe interferire con il resto?
Grazie