Anzahl Bytes beim Empfang über Wire prüfen/abgleichen

Ich stehe gerade auf dem Schlauch...
Ich empfange vom Master folgende Daten als bytes per I2C:

Master:

while(Serial1.available() > 0){
    var = Serial1.read();
    switch(var){
      case 'A' : DP1 = Serial1.parseInt();
                 Wire.beginTransmission(2);
                 Wire.write('A');
                 Wire.write((uint8_t*)&DP1, sizeof DP1);
                 Wire.endTransmission();
                 break;
                 ......
    }
  }

Slave empfängt:

void receiveEvent(int bytes) {
  
  while(Wire.available() > 0){
    var = Wire.read();
    switch(var){
      case 'A' : DP1 = Wire.read();
                 DP1 |= Wire.read() << 8;
                 break;
                 ....
    }
  }
}

Nun gibt mir der int bytes im receiveEvent ja die Anzahl an bytes zurück die empfangen werden. Ich würde diese nun gerne mit einem for(int i = 0; i < (bytes/2); i++){.....} prüfen lassen, damit auch die richtige Anzahl ankommen/eingeordnet werden.
Kann mir da jemand auf die Sprünge helfen? Das Einlesen der Bytes geschieht hier ja zweimal nachdem es den Buchstaben im "Case" zuordnet: Zuerst die ersten 8 bytes, dann die zweiten 8 bytes mit bitshifting nach links.

Grüsse

Stef

Bitte korrigiere Deine Fehler in diessem Text, vielleicht weißt Du dann die Lösung schon.

Kennst Du die Byteorder der beteiligten Controller?

... und kennst du sizeof DP1 ?

Da DP1 undefiniert ist, könnte man dir nur helfen, indem man dich beim Slave auf deine Variable bytes hinweist oder dich fragt, wofür du die while-Schleife hingeschrieben hast, aber soweit bist du ja schon (fast) selbst.

Bitshifting der eingelesenen Daten nach links natürlich um die nächsten 8 hinten an zu hängen.

Die Byteorder ist immer Buchstabe und Wert von 0 bis max. 1023 der gesendet wird. Der Buchstabe wird dann als erstes immer eingelesen und per Switch/Case zugeordnet.

Jein. Nicht so richtig, da die Werte per Joystick variabel bleiben die gesendet werden (bis max. 1023)

Die Byteorder betrifft nur binäre Werte, keine Texte. Sie gibt an, ob das höchste oder niedrigste Byte an der niedrigen Adresse gespeichert und zuerst übertragen wird.

Nein, sizeof DP1 kennt der Compiler, sobald diese Variable definiert wurde. Hängt auch vom Compiler-target ab.

Aber wem diese Information vorenthalten wird, kann dir nicht wirklich helfen.
Der Wert von DP1 ( 0 .. 1023 ) ist mir völlig egal und wird in immer der gleichen Anzahl Bytes übertragen.


Auch vermute ich, dass der Sketch "eigentlich" richtig arbeitet, und du ihn nur verschönern willst. Da gibt es wohl aus @DrDiettrich und meiner Sicht erstmal Grundlegenderes:
Schön wäre, wenn Sender und Empfänger es absichtlich gleich machen und nicht nur zufälligerweise.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.