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

Revision:
8:2e6b17f1da02
Parent:
7:752b8065ce2d
Child:
9:6b8619ccb136
--- a/Tarco.cpp	Fri Mar 07 08:01:26 2014 +0000
+++ b/Tarco.cpp	Thu Sep 11 07:43:31 2014 +0000
@@ -3,15 +3,27 @@
 
 DigitalOut debug(LED2);
 
-Tarco::Tarco(PinName tarcosignal, char mode) :
+Tarco::Tarco(PinName tarcosignal, char mode,callback_type _callback) :
     _tarcosensor(tarcosignal)
 {
     tarcomode=mode;
 //   AdvPeriode=0;
-    if (mode==0)
+    if (mode==RunMeanSwitchAuto)
         _tarcosensor.fall(this, &Tarco::RunMeanMeasure);
-    if (mode==1)
+    if (mode==SwitchAuto)
         _tarcosensor.fall(this, &Tarco::Rotationtimer);
+    if (mode==HirthMode)
+        _tarcosensor.fall(this, &Tarco::Hird);
+    callback = _callback;    
+}
+
+void Tarco::Hird()
+{
+//Hird er en totakt, der kommer med 
+        t.stop();
+        AdvPeriode[0]=t.read_us();
+        t.reset();
+        t.start();
 }
 
 void Tarco::Rotationtimer()
@@ -19,9 +31,10 @@
 //Da switchAuto motoren kommer ud med 24 pulser/rotation laver vi en prescale på 24
 //
     static int pulscounter;
-    if (pulscounter++>=PulsPrRotation-1) {
+    if (pulscounter++>=PulsPrRotation-1) { //Vi tæller til 24, således at det er tiden/omgang
         t.stop();
         AdvPeriode[0]=t.read_us();
+        callback(AdvPeriode[0]);
         t.reset();
         t.start();
         pulscounter=0;
@@ -34,6 +47,8 @@
     static unsigned int TarcoHead;
 //Måler tarco ved at lave en runing mean på periodetiderne, hvis der en variation
 //på over 20% bliver den pågældende periode skippet
+//Hvilket btyder at man skipper den lange Syncpuls, og kun tællere på de korte
+
     static bool MistedPeriod; //dette var en lang periode
     int thisperiode;
     float periodechange=0;
@@ -57,15 +72,19 @@
     unsigned int periodetid;
     lastfrekvens=0;
     switch (tarcomode) {
-        case 0: {
+        case RunMeanSwitchAuto: {
             periodetid=0;
             for (int i=0; i<TarcoRunMean; i++) periodetid+=AdvPeriode[i];
             lastperiode=periodetid/TarcoRunMean;
             lastfrekvens=(1e6/periodetid)*(TarcoRunMean/25);
         } break;
-        case 1: {
+        case SwitchAuto: {
             lastfrekvens=(1e6/AdvPeriode[0]);
         } break;
+        case HirthMode: {
+            lastfrekvens=(500e3/AdvPeriode[0]); //vi skal kun gannge med det halve da der er 2 pulser /omgang
+        } break;
+
         default: break;
     }
     return (float) lastfrekvens;