Já to mám nějak takhle
Kód: Vybrat vše
#define DS1307_I2C_ADDRESS 0x68 // to mi ukazal example "scanner"
// zapis 4 hodnot: 0, tmp1, tmp2, tmp3
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write(0); // set next input to start at the seconds register
Wire.write(tmp1);
Wire.write(tmp2);
Wire.write(tmp3);
Wire.endTransmission();
// cteni 3 hodnot z registru 0,1,2
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write(0x00); // set DS1307 register pointer to 00h
Wire.endTransmission();
Wire.requestFrom(DS1307_I2C_ADDRESS, 3);
tmp1 = Wire.read();
tmp2 = Wire.read();
tmp3 = Wire.read();
#define PCF8563_I2C_ADDRESS 0x51
// zapis 4 hodnot: 0, tmp1, tmp2, tmp3
Wire.beginTransmission(PCF8563_I2C_ADDRESS);
Wire.write(0); // set next input to start at the seconds register
Wire.write(tmp1);
Wire.write(tmp2);
Wire.write(tmp3);
Wire.endTransmission();
// cteni 3 hodnot z registru 0,1,2
Wire.beginTransmission(PCF8563_I2C_ADDRESS);
Wire.write(0x00); // set DS1307 register pointer to 00h
Wire.endTransmission();
Wire.requestFrom(PCF8563_I2C_ADDRESS, 3);
tmp1 = Wire.read();
tmp2 = Wire.read();
tmp3 = Wire.read();
// a klidne pouzivam oboji na stridacku
Prostě v tom uvodním jen nastavím jinou hodnotu, které zařízení na I2C sběrnici to má chtít
Zapojené to je paralelně. Tu adresa na sběrnici tam máš určitě "nějak" zadanou už teď, jinak by se to nedomluvilo ani s každým zvlášť.
Adresa se použije i pokud máš připojenou jen jednu věc. Ta věc nezkoumá, kdo na sběrnici kdy je či není, vždycky prostě reaguje jen na svojí adresu. (Teda až na broadcasty, ale ty teď stejně neřešíš.)
Pravda je, že spousta knihoven tu adresu má schovanou nějak uvnitř, ale pak prostě tu knihovnu "normálně používáš" a ona tak nějak "všechno sama" a víc různých knihoven vesele spolupravuje.