Interface to a standard tarco sensor. Measure the periode and the cal the speed

Tarco.cpp

Committer:
gert_lauritsen
Date:
2016-04-15
Revision:
14:07d968decc76
Parent:
13:4b58c9730bc7

File content as of revision 14:07d968decc76:

#include "Tarco.h"
#include "mbed.h"

Tarco::Tarco(PinName tarcosignal) :
    _tarcosensor(tarcosignal)
{
  lastfrekvens=0; AdvPeriode=0;
  _tarcosensor.fall(this, &Tarco::Rotationtimer);
  TimeOut.attach(this,&Tarco::TarcoTimeout, 0.5);
}


void Tarco::Rotationtimer()
{
//Da switchAuto motoren kommer ud med 24 pulser/rotation laver vi en prescale på 24
//
    static int pulscounter;
    GettingPuls=1;
    if (pulscounter++>=PulsPrRotation) { //Vi tæller til 24, således at det er tiden/omgang
        t.stop();
        AdvPeriode=t.read_us();
        if (AdvPeriode>0) lastfrekvens=(1e6/AdvPeriode); else lastfrekvens=0;
        t.reset();
        t.start();
        pulscounter=0;
    }
}

void Tarco::TarcoTimeout() {
//Timeout på tarco puls, så vi får resat tarcoen, når den staopper
  if (GettingPuls==0) { //Hvis vi ikke har haft en puld indenfor 0.5 sek, så er den stoppet
    t.stop(); t.reset(); 
    lastfrekvens=0;
  }
  GettingPuls=false;      
} 
   

float Tarco::RPM()
{
    float rpm=lastfrekvens*60;
    return (float) rpm;
}