Hallo Hannes,
Es gibt mehrere Ansätze Dein 'Problem' zu Lösen.
Du kannst natürlich die paar Zeilen so oft hintereinander schreiben, wie Du möchtest, bei 2 oder 3 Sensoren ist das kein Problem.
Du könntest Dir so wie Linux80 sagt eine Funktion basteln an die Du z.B. Die Slaveadresse und ein Zeiger auf ein 2 Byte Array übergibst.
Das sieht dann z.B. so aus:
Code:
void LeseTemp(uint8_t Adresse,char* Temp) {
i2c_start_wait(Adresse+I2C_WRITE);
i2c_write(GETTEMP);
i2c_rep_start(Adresse+I2C_READ);
*Temp++ = i2c_readAck();
*Temp = i2c_readNak();
i2c_stop();
}
Im Programm sehe das etwa so aus:
Code:
#define SensorBoden 0x90
#define SensorLuft 0x92
char TempBoden[2];
char TempLuft[2];
for(;;) {
LeseTemp(SensorBoden,TempBoden);
LeseTemp(SensorLuft,TempLuft);
...
...
...
}
Wenn man alles in einem Array haben möchte und die Slave Adressen schön um 2 versetzt sind, könnte man anstatt der Funktion eine for Schleife nutzen etwa so:
Code:
#define Sensor1 0x90
#define AnzahlSensoren 3
...
...
char Temperaturen[AnzahlSensoren*2];
uint8_t a;
for (a=0;a< (AnzahlSensoren+1)*2;a+=2){
i2c_start_wait(Sensor1+a+I2C_WRITE);
i2c_write(GETTEMP);
i2c_rep_start(Sensor1+a+I2C_READ);
Temperaturen[a] = i2c_readAck();
Temperaturen[a+1] = i2c_readNak();
i2c_stop();
}
Wie Du siehst, gibt es mehrere Wege nach Rom...
Viel Spaß Sebastian
P.S. Das zweite Beispiel gefällt mir nicht ganz, vielleicht könnte man das besser schreiben
Lesezeichen