mehrere Sensoren per Struct initialisieren


hallo leute.

bin nicht ganz sicher, ob der titel korrekt mein problem beschreibt, hier noch mal mit worten:
ich möchte mehrere sensoren (hier zunächst mal einfache dhtxx) zusammengefasst initialisieren und später abfragen. das ganze ist eher als Übung zum lernen gedacht, da ich noch immer regelmäßig über datentypen, zeiger und konstrukte stolpere.
hier zunächst mein aktueller stand:
code: [select]
#include "dht.h"

struct dht_t{char label[7]; char type[7]; byte pin;};

dht_t dht[]={
  {"dht01","dht11",2},
  {"dht02","dht22",3}
};

#define dhtanzahl (sizeof(dht)/sizeof(dht[0]))

//dht dht1; //originalaufruf
dht dht[1].label;  //mein versuch, soll später in einer schleife laufen

void setup()
{
  serial.begin(9600);
  serial.println();
  serial.println("status\thumidity (%)\ttemperature (c)\t(f)");
  serial.println();
  serial.print("anzahl: ");serial.println(dhtanzahl);
  (int i=0; i<dhtanzahl; i++){
    serial.print("label:  ");serial.println(dht[i].label);
    serial.print("typ:    ");serial.println(dht[i].type);
    serial.print("pin:    ");serial.println(dht[i].pin);
  }
  //  dht.setup(2); // original
  dht[1].label.setup(dht[1].pin);  //mein versuch, soll später in der schleife laufen
}

void loop()
{
  //hier die abfrage per schleife...
}

die deklarationen scheinen schon mal (dank jurs!) gelungen zu sein, zumindest sehe ich im seriellen monitor das, ich erwartet habe.
allerdings bin ich wohl doch etwas zu blauäugig rangegangen, mir die folgende fehlermeldung unmißverständlich klar macht:
code: [select]
dht_struc.ino:13:11: error: expected initializer before '.' token
dht_struc.ino: in function 'void setup()':
dht_struc.ino:28:16: error: request member 'setup' in 'dht[1].dht_t::label', of non-class type 'char [7]'
fehler beim kompilieren.

einfaches ersetzen durch zusammengbastelte strings ist wohl nicht, wäre ja auch zu schön gewesen.
kann mir jemand auf die sprünge helfen?

besten dank, emes.

du versuchst dht[] zweimal zu deklarieren, das geht schon mal garnicht. die namen müssen unterschiedlich sein.

ich weiß nicht, ob in c++ eine statische initialisierung eines arrays mit objekten funktioniert. dazu müßtest du ein array deklarieren, und einen konstruktor benutzen, der die parameter übernimmt.
dht dht[3] = {dht(...), dht(...), dht(...)}; //oder ähnlich, mein c++ ist ziemlich eingerostet
wobei ... die parameter sind, die der (ein) konstruktor dht::dht erwartet. vermutlich mußt du einen passenden konstruktor selbst schreiben und zur klasse dht hinzufügen.

möglicherweise muß die deklaration und initialisierung in eine *.cpp datei, damit die ide nicht versucht, darin irgendwas zu ändern, wie es bei *.ino dateien macht.


Arduino Forum > International > Deutsch (Moderator: uwefed) > mehrere Sensoren per Struct initialisieren


arduino

Comments