Eigene Klasse für Kypad Eingabe

Hallo.
Ich übersehe was, weiß aber nicht was.
Ich möchte eine Klasse schreiben, in der ich mit einem 4x4 Tastenfeld Daten erfassen kann.
Fehlermeldung:
Benutzt: C:\Users\kjzil\Documents\Arduino\libraries\Keypad-master
exit status 1
Fehler beim Kompilieren für das Board Arduino Mega or Mega 2560.

Testprogramm:

#include <LiquidCrystal_I2C.h>


/****************(Definieren der Globale Variablen)***************************/

LiquidCrystal_I2C lcd (0x27,2,1,0,4,5,6,7,3,POSITIVE);

#include "klassen.h"

//Keypad_I2C taste( makeKeymap(tastenLayout), zeilenPins, spaltenPins, anzZeilen, anzSpalten, I2CADDR); 

idPin pin1(6);
byte nr = 0;

void lcdClear() {
  lcd.clear();
  lcd.print("  Test ");
  nr = 0;
  lcd.setCursor(2,2);
}
/**********(setup)*************/
void setup(){
  taste.begin( );        
  Serial.begin(115200);
  lcd.begin(20, 4);
  lcd.setBacklight(HIGH);  
  lcdClear();
  lcd.print(pin1.getSize());
  pin1.setNeuePin("*0##0*");
}

/******(Hauptprogramm)**********/
void loop(){
  char Zeichen = taste.getKey();
  if (Zeichen != NO_KEY) {
    Serial.println(Zeichen);
  }
  
}

die h-Datei:

#ifndef __leer_h
#define __leer_h

#include <Arduino.h>
#include <Keypad_I2C.h>
#include <Keypad.h>        
#include <Wire.h>

/***********(Definieren der Globale Variablen)*********************/

#define I2CADDR 56 //0x32                          // I2C Adresse vom PCF8574
const byte anzZeilen = 4;                        //Anzahl Zeilen 
const byte anzSpalten = 4;                       //Anzahl Spalten
//Hier kannst du die Symbole von deinem Keypad eintragen
char tastenLayout[anzZeilen][anzSpalten] = {
  {'1','2','3','A'}, 
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};

//Hier definieren wie das Keypad mit den IO Pins vom PCF8574 verdrahtet ist.
byte zeilenPins[anzZeilen] = {3, 4, 5, 6};       //Zeilen Pins
byte spaltenPins[anzSpalten] = {0, 1, 2, 7};     //Spalten Pins

//Initialisierung von Keypad
Keypad_I2C taste( makeKeymap(tastenLayout), zeilenPins, spaltenPins, anzZeilen, anzSpalten, I2CADDR); 

class idPin {
  public:
    // Constructor
    idPin(byte l);    

    void clear();  
    byte getSize();
    void setNeuePin(char* n);
    char* pinEingabe(byte anz, bool wie);
    
  private:
    byte ein[16];  
    byte _l;
    char* resPin;
};

#endif

und die cpp Datei

#include <Arduino.h>
#include "klassen.h"
****************************************************
// Constructor
idPin::idPin(byte l){  
  _l = l;
}

//**************************************************

void idPin::clear(){
  // mach was
} 

//**************************************************

byte idPin::getSize() {
  return _l;
}

void idPin::setNeuePin(char* n) {
  resPin = n;
  Serial.println(resPin);
}

//**************************************************

char* idPin::pinEingabe(byte anz, bool wie){
    char Taste = taste.getKey();

}
 
//***************************************************

Wo mache ich den Fehler?

Gruß Kalli

Kally:
Wo mache ich den Fehler?

Du unterschlägst den Hauptteil der Fehlermeldung.

Gruß Tommy

Hallo Tommy

im Anhang ist die ganze Meldung.

Gruß Kalli

error.txt (24.7 KB)

Da brauchen wir auch noch die Links zu den Keypad-Libs.
Irgendwo sind Variablennamen mehrfach definiert. (taste,tastenLayout,zeilenPins,spaltenPins)

Gruß Tommy

Du musst zwischen Definitionen und Deklarationen unterscheiden.
Du definierst in deinem .h-File Variable und Objekte. Die werden nun sowohl beim include im Sketch angelegt, als auch beim include in deiner .cpp Datei.
D.h. die gibt's 2x im Speicher. Da beschwert sich dann der Linker, dass es doppelte Definitonen gibt.

In das .h File gehören nur Deklarationen rein. Die Definionen gehören ins .cpp oder .ino File - ja nachdem wo sie gebraucht werden. Wenn sie in beiden Dateien gebraucht werden, musst Du sie im .h-FIle als extern deklarieren.
Definieren ( = im Speicher anlegen ) darfst Du sie jedenfalls nur einmal.