Alternative zu Speichern der Daten in Array

Hallo
ich habe versch. LED's zu steuern
Die Werte erhalte ich von einer DB.
Das sind u.a. Einschaltzeiten, Sonneruntergsdauer etc. etc.
Die Datentypen ändern sich nicht

Ich könnte alle versch. LED's und deren Einstellungswerte in einem mehrdimensionalen Array speichern.
Weiß aber nicht ob das die beste Lösung ist und für mich nicht recht unübersichtlich wird.

Gibt das zu solchen Problemchen bessere Lösungsansätze?

Grüße Sepp

Dafür nimmt man Strukturen und evtl. Arrays aus Strukturen

https://de.wikibooks.org/wiki/C%2B%2B-Programmierung/_Eigene_Datentypen_definieren/_Erstellen_und_Zerstören

noiasca:
ja.

Geraten, weil Sketch sehen wir keinen. Du könntest z.B. ein schönes (eindimensionales) struct definieren.

Hallo,
den sketch gibt es auch noch nicht und muss es bei der Frage auch nicht geben.
Kann aber sein das ich mich falsch ausgedrückt habe

Hier im Detail
Datensätze:

  1. LedId=1,StundeAn=8, MinuteAn=30, StundeAus=18, MinuteAus=30, RampUpMinuten=30, RampDownMinuten=30, LedRaumId=3
  2. LedId=2,StundeAn=8, MinuteAn=30, StundeAus=18, MinuteAus=30, RampUpMinuten=30, RampDownMinuten=30, LedRaumId=4
  3. LedId=3,StundeAn=8, MinuteAn=30, StundeAus=18, MinuteAus=30, RampUpMinuten=30, RampDownMinuten=30, LedRaumId=2
  4. LedId=4,StundeAn=8, MinuteAn=30, StundeAus=18, MinuteAus=30, RampUpMinuten=30, RampDownMinuten=30, LedRaumId=1

usw.
Ich könnte jetzt ein mehrdimensioanles Array erstellen.

  • müsste ich stets wissen wieviele LED's angesteuert werden ... das geht zwar, aber eleganter wäre eine andere Lösung

(eindimensionales) struct ?
gibt es dazu einen Link für ein gutes Beispiel?

Grüße Sepp

Mehrdimensionale Arrays sind für sowas unsinnig. Ein einziger Datentyp würde hier zwar gehen. Aber man hat keine Namen was die einzelnen Werte bedeuten. Der Code ist also kaum lesbar

Links habe ich dir schon gegeben. Da wird das sogar mit einem Array gezeigt

Serenifly:
Mehrdimensionale Arrays sind für sowas unsinnig. Ein einziger Datentyp würde hier zwar gehen. Aber man hat keine Namen was die einzelnen Werte bedeuten. Der Code ist also kaum lesbar

Links habe ich dir schon gegeben. Da wird das sogar mit einem Array gezeigt

genau, aus diesem Grund auch meine Frage.
Aus Unwissen heraus da ich nur Arrays kannte mich aber mit Klassen und Strukturen nicht auskenne suchte ich nach solchen Links.

edit:
sorry hatte den ersten Link nicht gleich gesehen... dort ist es für mich besser beschrieben.
Danke!!!

Brauch nur ein paar Beispiele mehr... die Erklärung in dem link ist schon gut aber für mein Verständnis brauch ich mehr Beispiele bis ich es gefressen habe.

Hallo,

struct Daten {
  byte LedId;
  byte StundeAn;
  byte MinuteAn;
  byte StundeAus;
  byte MinuteAus;
  byte RampUpMinuten;
  byte RampDownMinuten;
  byte LedRaumId;
};

Daten paket[] = {
  {1, 8, 30, 18, 30, 30, 30, 3},    // Index 0
  {2, 8, 30, 18, 30, 30, 30, 3},
  {3, 8, 30, 18, 30, 30, 30, 3},    // Index 2
};

void setup()  {
  Serial.begin(9600);

  Serial.println(paket[0].LedId);     // 1. LED "LedID"
  Serial.println(paket[2].MinuteAus); // 3. LED "MinuteAus"
}

void loop() {

}

Doc_Arduino:
Hallo,

struct Daten {

byte LedId;
  byte StundeAn;
  byte MinuteAn;
  byte StundeAus;
  byte MinuteAus;
  byte RampUpMinuten;
  byte RampDownMinuten;
  byte LedRaumId;
};

Daten paket[] = {
  {1, 8, 30, 18, 30, 30, 30, 3},    // Index 0
  {2, 8, 30, 18, 30, 30, 30, 3},
  {3, 8, 30, 18, 30, 30, 30, 3},    // Index 2
};

void setup()  {
  Serial.begin(9600);

Serial.println(paket[0].LedId);    // 1. LED "LedID"
  Serial.println(paket[2].MinuteAus); // 3. LED "MinuteAus"
}

void loop() {

}

perfekt . Vielen Dank
exakt so brauche ich es und kann nun damit auch gut umgehen.
Super Beispiel

Ich benötige das nicht nur für die Beleuchtung sondern auch für Fußbodtemperaturen, Raumtemp's etc.
wenn es so funktioniert kann ich von Anfang an gleich alles mit den Werten der DB oder den Sensorwerten füllen und später gut leserlich im Programm auswerten.

Danke!

Doc_Arduino:
Hallo,

struct Daten {

byte LedId;
  byte StundeAn;
  byte MinuteAn;
  byte StundeAus;
  byte MinuteAus;
  byte RampUpMinuten;
  byte RampDownMinuten;
  byte LedRaumId;
};

Daten paket[] = {
  {1, 8, 30, 18, 30, 30, 30, 3},    // Index 0
  {2, 8, 30, 18, 30, 30, 30, 3},
  {3, 8, 30, 18, 30, 30, 30, 3},    // Index 2
};

void setup()  {
  Serial.begin(9600);

Serial.println(paket[0].LedId);    // 1. LED "LedID"
  Serial.println(paket[2].MinuteAus); // 3. LED "MinuteAus"
}

void loop() {

}

Eine Frage noch.

Kann ich die Variablendefinition

===>
Daten paket[] = {
{1, 8, 30, 18, 30, 30, 30, 3}, // Index 0
{2, 8, 30, 18, 30, 30, 30, 3},
{3, 8, 30, 18, 30, 30, 30, 3}, // Index 2
};

auch im void setup
Bereich machen?

Ich bekomme ja die Daten durch eine mysql-abfrage.
Ich müsste
Daten paket[] = {
while(){

}

};

geht dies überhaupt, wenn ja muss ich hier auf eine Besonderheit aufpassen?

Grüße Sepp

sepp01:
Kann ich die Variablendefinition ... auch im void setup Bereich machen?

Die Variable paket[] dürfte global am einfachsten zu verwenden sein, weshalb Du sie global lassen solltest. In loop wirst Du einen endlichen Automaten anlegen, der die Möglichkeit hat, frische Daten von der Datenbank in die Struktur zu übertragen.

agmue:
Die Variable paket[] dürfte global am einfachsten zu verwenden sein, weshalb Du sie global lassen solltest. In loop wirst Du einen endlichen Automaten anlegen, der die Möglichkeit hat, frische Daten von der Datenbank in die Struktur zu übertragen.

ach so,

nur das ich es verstehe.
Das die Deklaration global sein sollte ist mir bewusst.

ich sollte/kann also erstmal die Variable
Daten paket[] {
{0, 0, 0, 0, 0, 0, 0, 0}, // Index 0

};

erstellen und später im Loop kann ich diese Variable dann füllen?
reicht es eigentlich aus nur die Variable zu definieren wie

Daten paket[]{};

Grund meine Frage:
Ich weiss ja an der Stelle der Definition nicht wie viele LED's in der DB stehen.
somit bekomme ich versch. viele Datensätze geliefert

Noch eine Frage:

die Datentypen in der Deklaration
struct Daten {};
können verschieden sein?
z.B. auch float?

Hallo,

nicht ganz. Die Anzahl der Arrays bzw. die Größe des Array names paket muss von Beginn an bekannt sein.
Du hast 10 Leds, dann legst du es mit der Größe 10 fest.
Daten paket[10];
Mehr musst du nicht machen.
Die Struktur vom Paket ist bekannt und bleibt bekannt. Extra alles Nullen musst du nicht.

struct Daten {
  byte LedId;
  byte StundeAn;
  byte MinuteAn;
  byte StundeAus;
  byte MinuteAus;
  byte RampUpMinuten;
  byte RampDownMinuten;
  byte LedRaumId;
};

Daten paket[10];
  

void setup()  {
  Serial.begin(9600);

  paket[0].LedId = 22;    
  paket[9].MinuteAus = 44;
  
  Serial.println(paket[0].LedId);
  Serial.println(paket[0].StundeAn);     
  Serial.println(paket[9].MinuteAus); 
  Serial.println(paket[9].LedRaumId);
}

void loop() {

}

Die Datentypen im struct kannst du dir anlegen wie du möchtest. Du baust dir damit deinen eigenen Datentyp. Hier heißt er "Daten". Jetzt solltest du dich in das Thema struct einarbeiten und damit rumspielen ...