Librarie selbst erstellen Problem

Hallo habe da mal wieder ein Problem
Heute habe ich versucht einen 7 Segmente Display anzusteuern hat auch super Funktioniert
jetzt wollte ich das ganze Übungshalber mal in eine lib packen nur irgendwie klappt das nicht :frowning:

Eventuell weis ja jemand von euch hilfe?

Hier einmal meine header Datei

/*
2 7 Segmente display um zahlen zwischen 00 und 99 anzuzeigen
*/
#ifndef SegmentDisplay_h
#define SegmentDisplay

#include "Arduino.h"

class SegmentDisplay
{
  public:
    SegmentDisplay(int a,int b,int c,int d,int e,int f,int g,int a2,int b2,int c2,int d2,int e2,int f2,int g2);
    void Display(int number);
  private:
    int _a;
    int _b;
    int _c;
    int _d;
    int _e;
    int _f;
    int _g;
    int _a2;
    int _b2;
    int _c2;
    int _d2;
    int _e2;
    int _f2;
    int _g2;
    int _number;
   
    
    
};

#endif

dann hier die cpp

#include "Arduino.h"
#include "SegmentDisplay.h"

SegmentDisplay::SegmentDisplay(int a,int b,int c,int d,int e,int f,int g,int a2,int b2,int c2,int d2,int e2,int f2,int g2)
{
  int array[]={a,b,c,d,e,f,g,a2,b2,c2,d2,e2,f2,g2}
  for (i=0;i<14;i++){
  pinMode(array[i], OUTPUT);
  }
  
     _a = a;
     _b = b;
     _c = c;
     _d = d;
     _e = e;
     _f = f;
     _g = g;
     _a2 = a2;
     _b2 = b2;
     _c2 = c2;
     _d2 = d2;
     _e2 = e2;
     _f2 = f2;
     _g2 = g2;
}

void SegmentDisplay::Display(int number)
{
  

  if (number==1)
  {
    digitalWrite(g,HIGH);
    digitalWrite(g2,HIGH);
  }
  
  _number=number
}

und so wollte ich das ganze ansprechern

#include <SegmentDisplay.h>

int a = 23;
int f = 25;
int e = 27;
int b = 22;
int g = 24;
int c = 26;
int d = 29;
int a2 = 31;
int f2 = 33;
int e2 = 35;
int b2 = 28;
int g2 = 30;
int c2 = 32;
int d2 = 34;
SegmentDisplay (a,b,c,d,e,f,g,a2,b2,c2,d2,e2,f2,g2);
void setup(){

SegmentDisplay.Display('1');
}
void loop(){}

ich hoffe jemand von euch kann da durchblicken und mir sagen was für einen Fehler ich gemacht habe.
Danke

Edit:
Ziel der ganzen Sache soll am ende werden das ich der lib eine maximal 2 stellige zahl zusende und diese dann auf meinem Display angezeigt wird
Aus VB.net kenn ich das mit den Public Functions und dort funktionierte es immer bestens
oder gibt es auch sowas

Dein Code dürfte nicht kompilieren.

  if (number==1)
  {
    digitalWrite(g,HIGH);
    digitalWrite(g2,HIGH);
  }

g und g2 sind hier nicht definiert. Du wolltest wahrscheinlich _g und _g2 nehmen.

void Display(int number);

aber

SegmentDisplay.Display('1');

Einmal definierst Du den Parameter als Integer und übergibst der Methode dann einen Character. Auch hier wird der Compiler Fehler ausspucken.

SegmentDisplay (a,b,c,d,e,f,g,a2,b2,c2,d2,e2,f2,g2);

Das sollte wahrscheinlich eine Objekt-Erzeugung werden, aber das Objekt hat keinen Namen. Der Code sollte eher so aussehen:

SegmentDisplay ssd(a,b,c,d,e,f,g,a2,b2,c2,d2,e2,f2,g2);
void setup(){
  ssd.Display('1');
}

Hier fehlt das Semikolon:

int array[]={a,b,c,d,e,f,g,a2,b2,c2,d2,e2,f2,g2}

Das macht wenig Sinn:

#ifndef SegmentDisplay_h
#define SegmentDisplay

Damit dürfte der Code kompilieren (sprich: das sind Fehler die der Compiler auch findet, dafür bräuchtest Du das Forum nicht zu bemühen), auch wenn der Code noch nicht viel Vernünftiges produziert.

wenn der Code noch nicht viel Vernünftiges produziert

Na na, pylon, da ist schon viel Gutes drin, wenn er deine Anregungen einbaut und es kompiliert kriegt.

ssd.Display(1); // sollte schon fast gehen
ssd.Display('1'); // kein Fehler, aber Anzeige 49 "im Endausbau"

hat auch super Funktioniert

prima, aber dann hast du wohl ein bisschen zu viel geändert :wink:

Was hältst du davon, bool Display(byte data); zu definieren und zurückzumelden, ob ein gültiger Wert (00 .. 99 im Endausbau) mitgeliefert wurde?

Willst du noch die Methode void SegmentDisplay::Clear() definieren und jedesmal aufrufen müssen, oder wie kriegst du die Segmente wieder aus ?

danke schonmal dafür werde das noch ausprobieren bin heute erst aus dem Urlaub gekommen