Hallo,
gut, man muss damit nur eine Lib pflegen statt mehrere, auch wenn diese dann komplizierter aussieht, für mich jedenfalls. 
Ich hoffe jetzt alles richtig umgesetzt zu haben. Bekomme nur noch eine Fehlermeldung, aber ich sehe den Klammerfehler nicht.
Die beiden leicht verschiedenen Methoden mit gleichen Namen "getCounter" und setCounter" sind dann intern getrennt.?
Also das eine ist nur für "GrayEncoder_v2" sichtbar und die andere Methode gleichen Namens nur für "ALSP_Encoder"?
Weil "ALPS_Encoder" erbt doch von der anderen. Hätte damit 2x "getCounter" und setCounter" zur Verfügung?
// Deklaration der Klasse
// GrayEncoder_v2.h
#ifndef GrayEncoder_v2_h
#define GrayEncoder_v2_h
#include <Arduino.h>
class GrayEncoder_v2 // Klassenname "GrayEncoder_v2"
{
protected: // private wird zu protected, nur intern zugängliche Elemente ...
volatile byte const* PORT; // verwendeter Port
byte const PinA; // Pin Port.Bit erste Phase
byte const PinB; // Pin Port.Bit zweite Phase
int enc_last; // Startwert 2, weil TLE4905 low aktiv
volatile long enc_counter; // Zähler
int direction; // Richtungsanzeige +1 / -1
byte Phase_A; // erste Phase
byte Phase_B; // zweite Phase
public: // von außen zugängliche Elemente ...
GrayEncoder_v2 (volatile byte*, byte, byte); // Port, Port.Bit, Port.Bit
void encode();
void delCounter(); // nullt den Counter
void setCounter( long value ); // Counter-Wert ändern
long getCounter() { return enc_counter; } // Getter-Methode, Zählerrückgabe
int getDirection() { return direction; } // Getter-Methode, Richtungsanzeige
int getA() { return Phase_A; } // Getter-Methode, Signal von Phase A
int getB() { return Phase_B; } // Getter-Methode, Signal von Phase B
};
class ALPS_Encoder : public GrayEncoder_v2 // Klasse "ALPS_Encoder" erbt von "GrayEncoder_v2"
{
public: // von außen zugängliche Elemente ...
ALPS_Encoder (volatile byte*, byte, byte); // Port, Port.Bit, Port.Bit
void setCounter( long value ); // Counter-Wert ändern
long getCounter() { return enc_counter/2; } // Getter-Methode, Zählerrückgabe
};
#endif
// Definition der Klasse
// GrayEncoder_v2.cpp
#include "GrayEncoder_v2.h"
// Konstruktor ::
GrayEncoder_v2::GrayEncoder_v2 (volatile byte *p_Port, byte _A, byte _B):
// Initialisierungsliste
PORT(p_Port),
PinA(_A),
PinB(_B),
enc_last(0x02), // Startwert B11, weil TLE4905 low aktiv
enc_counter(0), // Zähler
direction(0), // Richtungsanzeige +1 / -1
Phase_A(1), // default 1, weil TLE4905 low aktiv
Phase_B(1) // default 1, weil TLE4905 low aktiv
{ }
// ab hier Scopes/Bereichsoperator ::
void GrayEncoder_v2::encode()
{
int i = 0;
Phase_A = (*PORT >> PinA & 1); // einzelnes Bit heraus fischen
Phase_B = (*PORT >> PinB & 1);
if( Phase_A ) {
i = 1;
}
if( Phase_B ) {
i ^= 3; // convert gray to binary
}
i -= enc_last; // difference new - last
if( i & 1 ) { // bit 0 = value (1)
enc_last += i; // store new as next last
enc_counter += (long) (i & 2) - 1; // bit 1 = direction (+/-), Zähler
direction = (i & 2) - 1; // Richtungsanzeige (+1 / -1)
}
}
void GrayEncoder_v2::delCounter()
{
enc_counter = 0;
}
void GrayEncoder_v2::setCounter( long value )
{
enc_counter = value;
}
// neue vererbte Klasse //
// Konstruktor Vererbung
ALPS_Encoder(byte *p_Port, byte _A, byte _B) : GrayEncoder_v2 (*p_Port, _A, _B)
{ }
void ALPS_Encoder::setCounter( long value )
{
enc_counter = value * 2;
}
ich weiß nicht was ihm stört, nehme ich den hinteren Zeiger weg, meckert er trotzdem
C:\Users\Worker\Documents\Arduino\libraries\GrayEncoder_v2\GrayEncoder_v2.cpp:58:19: error: expected ')' before '*' token
ALPS_Encoder(byte *p_Port, byte _A, byte _B) : GrayEncoder_v2 (p_Port, _A, _B)