String in Variablennamen konvertieren

Hallo liebe Arduino Gemeinde,

ich beginne gerade mit MEGA2560 etwas zu entwickeln.
Ich habe im Netz leider keine Antwort auf meine Frage gefunden.
Daher stell ich diese mal hier ein.

Ich möchte beispielsweise mehrere Stringvariablen im Programm als “Variable” weiterverarbeiten.
Beispielsweise könnte man auch die Stringvariablen zusammenbauen (“config.” +“etc”)
Nun möchte ich meine Struct “config” mit den Stringvariablen abfragen, bekomme es aber einfach nicht in den Griff.

String Bezeichnung={“config.Schwellwert_ein”,“config.Schwellwert_aus”,“config.Pool_WasserTemp_max”};

for (a=0;a<3;a=a+1)
{
int Wert = Bezeichnung[a]
}

Wie bekommt man das hin?
Kann mir jemand hier helfen?

String Bezeichnung[]={
     "config.Schwellwert_ein", 
     "config.Schwellwert_aus",
     "config.Pool_WasserTemp_max"  };

for (int a=0; a<3; a++)
{
  String Name = Bezeichnung[a];
}

Aber wofür brauchst du das ?

An den Wert einer Variable
struct {int Schwellwert_ein; /* … */ } config= {123};

kommst du so nicht dran, vergiss es.

Hallo,
ich habe eine Structure mit meinen Config Parametern gebaut. Jetzt benötige ich diese "Varaiablennamen" außer zum Speichern und Lesen auch noch im Programm z.B. Einstellmenue etc. Daher wollte ich diese nicht jedesmal neu schreiben, sondern nur einmal im Programm als Wortlaut hinterlegen.

Gruß Wigbert

Eine Union wäre vielleicht ein passender Hack dafür. Dann kann man Variablen sowohl als Array als auch einzeln ansprechen.

Hallo,
mit einer Union habe ich mich bisher noch nicht beschäftigt.
Ich dachte das wäre ähnlich der Structure. Ich versuche mal mit einer
Union zu arbeiten.
Melde mich.
Danke erst mal.

Bei einer Union teilen sich alle Variablen den gleichen Speicher. Du kannst also ein struct aus 3 ints und ein Array aus 3 ints darin haben und so die Variablen über einen Index ansprechen.

So:

union config_u
{
  struct
  {
    int value1;
    int value2;
    int value3;
  };

  int array[3];
};

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

  config_u config;

  config.value1 = 123;
  config.value2 = 456;
  config.value3 = 789;

  for (int i = 0; i < 3; i++)
    Serial.println(config.array[i]);
}

void loop()
{
}

... aber an den Namen einer Variablen als Text, oder umgekehrt von einem Text auf einen Variablennamen kommst du nicht, falls es das ist was du versuchst.

Ausser du programmierst es:

struct {char* name; int wert;} var[] = {
   {"Test1", 1},
   {"Test2", 200}
};

Programmtechnisch intern heisst die Variable zwar var, aber wenn du willst, kannst du den Namen "Test1" anzeigen oder suchen, und mit dem zugeordneten Integer-Wert arbeiten.

Ob du in deinem SourceCode das Ding var oder anders genannt hast, ist nach dem Kompilieren weg.

Kannst du natürlich auch auf deinen --etwas komplizierteren-- Fall erweitern.

michael_x:
... aber an den Namen einer Variablen als Text

Mit dem # Makro geht das schon:
http://bruceblinn.com/linuxinfo/Stringification.html
Aber das hilft hier auch nicht weiter, da das beim Kompilieren gemacht wird. Kann man z.B. beim Debuggen verwenden um sich Variablen-Namen ausgeben zu lassen

Ich glaube aber das war auch nicht das Ziel, sondern nur ein Irrweg, weil er nicht weiß wie er sein eigentlich Ziel erreichen soll. Und das habe ich als "Ich will eigentliche getrennte Variablen wie ein Array ansprechen" verstanden. Vielleicht liege ich aber falsch.