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:
Im Programm sehe das etwa 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(); }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 SensorBoden 0x90 #define SensorLuft 0x92 char TempBoden[2]; char TempLuft[2]; for(;;) { LeseTemp(SensorBoden,TempBoden); LeseTemp(SensorLuft,TempLuft); ... ... ... }Wie Du siehst, gibt es mehrere Wege nach Rom...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(); }
Viel Spaß Sebastian
P.S. Das zweite Beispiel gefällt mir nicht ganz, vielleicht könnte man das besser schreiben![]()







Zitieren

Lesezeichen