Go Down

Topic: ds1820 mehrere DeviceAdressen in Array packen (Read 640 times) previous topic - next topic

profwebapps

Hallo, ich möchte mehrere DeviceAdressen von verschiedenen ds1820 Sensoren in einem Array deklarieren und in der loop Schleife geziehlt einzelne ansprechen und auslesen.

Jetzt habe ich es so
Code: [Select]
DeviceAddress sensorAdress[3] = {
'0x10, 0x16, 0x2E, 0x57, 0x02, 0x08, 0x00, 0x2F',
'0x10, 0x11, 0x40, 0xC0, 0x01, 0x08, 0x00, 0x9A',
'0x28, 0xE3, 0xAE, 0xBE, 0x03, 0x00, 0x00, 0x9F'
};


Wenn ich jetzt mit
Code: [Select]
Serial.println(getTemperature(sensorAdress[1])); versuche die temperatur des Sensors auszulesen dann gibt er mit immer nur 1095.94 aus.

Gebe ich für jede DeviceAdresse eine eigene variable an
Code: [Select]
DeviceAddress sensor1 = { 0x10, 0x16, 0x2E, 0x57, 0x02, 0x08, 0x00, 0x2F }; dann kann ich die Temperatur ohne Probleme auslesen.

Kann mir also jemand sagen wie ich die DeviceAdressen richtig in das Array packe und darauf zugreifen kann?

Vielen Dank

derRobert

dein Array wäre 24 Bytes groß und jede adresse besteht aus 8 Bytes .

Also Adresse 1 wäre nicht sensorAdress[1]

sondern sensorAdress[0] sensorAdress[1]sensorAdress[2]sensorAdress[3]sensorAdress[4]sensorAdress[5]sensorAdress[6]sensorAdress[7]

Die Adressen sind richtig im Array eingetragen. Aber der Aufruf ist nicht so einfach wie du es dir denkst.
Allerdings muss ich leider zu geben das du für den Aufruf an sich jemanden anderes fragen musst. ich schaffe das auf die schnelle auch nicht.... :(

Gruß derRobert

circuit99

Du brauchst ein zweidimensionales Array das n x 8 groß ist:
Code: [Select]

DeviceAddress sensorAdress[][] = {
{0x10, 0x16, 0x2E, 0x57, 0x02, 0x08, 0x00, 0x2F},
{0x10, 0x11, 0x40, 0xC0, 0x01, 0x08, 0x00, 0x9A},
{0x28, 0xE3, 0xAE, 0xBE, 0x03, 0x00, 0x00, 0x9F}
};


Ich bin mir nicht sicher wie deine Library arbeitet aber die Ansprache müsste dann so gehen:

Code: [Select]

Serial.println(getTemperature(sensorAdress[0]));  // Sensor 1

TransWarp

Ich habe es so gemacht:

Code: [Select]
byte sensor[][8] ={ {0,0,0,0,0,0,0,0} ,
{0x10, 0x16, 0x2E, 0x57, 0x02, 0x08, 0x00, 0x2F},
//weitere Sensoren
};

...

Sensornummer=1;
addr[0]=sensor[Sensornummer][0];
addr[1]=sensor[Sensornummer][1];
addr[2]=sensor[Sensornummer][2];
addr[3]=sensor[Sensornummer][3];
addr[4]=sensor[Sensornummer][4];
addr[5]=sensor[Sensornummer][5];
addr[6]=sensor[Sensornummer][6];
addr[7]=sensor[Sensornummer][7];

ds.select(addr);   


Das funktioniert, aber kann man das direkter auslesen ohne die 8 Adressteile umzukopieren ?

circuit99

hast du es denn mal versucht in indem du das array übergibtst

Code: [Select]

ds.select(Sensor[1]);


oder

Code: [Select]

ds.select(Sensor[1][]);


irgendwie so müsste es funktionieren. guck was der compiler sagt.

Code: [Select]

byte sensor[][8] ={ {0,0,0,0,0,0,0,0} ,
{0x10, 0x16, 0x2E, 0x57, 0x02, 0x08, 0x00, 0x2F},
//weitere Sensoren
};


Warum machst du die Nullen darein? damit du nicht bei 0 anfangen musst zu zählen?

Go Up