Fordulat számmérésen agyalgattam, kiolvastam a rpm és Arduino google sok találatát.
Ez vezetett a megoldásra: http://playground.arduino.cc/Main/ReadingRPM
Illetve természetesen ez a FÓRUM
Próba panelon még nem raktam össze, csak a kódót szerkeztettem meg.
Kód:
Kód: Egész kijelölése
volatile byte rpmcount;
unsigned int rpm;
unsigned int lastmillis;
int deltat;
void setup()
{
pinMode(13, OUTPUT); //LED a D13 kivezetesen
pinMode(3,INPUT); //D3 GND fele nyomogomb (opcio!)
digitalWrite(3, HIGH); //D3 belso felhuzoellenallas (opcio!)
Serial.begin(9600);
attachInterrupt(3, rpm_fun, RISING);
rpmcount = 0;
rpm = 0;
deltat = 1000;
}
void loop()
{
if (millis() - lastmillis == deltat) //1000ms egy másodperc, így addig csak a megszakitással a fordulatszám jeleket számolgatjuk. Érdekes lehet a tesztelésnél a nagyobb-vegy-egyenlőt => vizsgálni.
{
detachInterrupt(3); //Interupt kipakcsolása a számolás folyamatára
rpm = rpmcount * 60 * 1000 / deltat;
Serial.print("RPM =\t");
Serial.print(rpm);
Serial.print("1/min;\t");
Serial.print("freq=");
Serial.print(rpmcount);
Serial.println("Hz");
rpmcount = 0;
attachInterrupt(3, rpm_fun, RISING);
}
}
void rpm_fun()
{
rpmcount++;
}
Ha közben komolyabb feladatokat is akarunk adni a AVR-nek, akkor az interupt mindig megszagatja.
Lehet az egy megoldás, hogy az Arduino egy másik Arduinotól kapja meg az online fordulatszám jelet.
Ezen még elmélkednem kell...
Lóri