Die Header-Datei

class Motor
{
  private:
  int en,m1,m2,i1,i2;
  int st[4]={0,2,3,1};    // Abfolge der Zustände
  volatile int pos;       // Aktueller Zustand
  volatile long steps=0;  // Einzelschritte (steps)
  volatile long stepsalt=0;
  volatile long talt,tneu;// Zeitpunkt der Messungen
  volatile float f;       // Schrittfrequenz
  
  public:
  Motor(int e,int a,int b,int c,int d);
  void power(int p);
  void richtung(); /*
                    * Wir immer ausgeführt, wenn eine Änderung bei
                    * i1 oder i2 auftritt
                    */
  long getSteps(); // Liefert die bisher gemachten Eintelschritte
  float getF();    // Liefert die Frequenz Einzelschritte/Sekunde
};

Für die Schrittfrequenz \(f\)gilt: $$f={{1}\over{T}}={{Anzahl \, der\, Schritte}\over{Benötigte\, Zeit}}$$

Um Ungenauigkeiten der Lichtschrankenpositionen weg zu mitteln, berechnen wir die Frequenz immer nach 4 Schritten.

In der Klasse müssen noch einige zusätzliche Daten gespeichert werden:

stepsalt gibt die Schrittzahl bei der letzten Messung an.

In talt und tneu sind die Zeitpunkte der letzten und der aktuellen Messung gespeichert.

Und f speichert schließlich die berechnete Frequenz.

Die Methode getF() liefert die Frequenz \(f\) zurück.