Problem mit memcpy

Hallo liebe Leute!

Bin neu hier und hab auch gleich ein Problem.
Ich versuche 16 Sensorwerte seriell an meinen PC zu senden. Es soll ein simples Protokoll mit Checksumme werden. Beim Versuch den Sende-Buffer mit den Daten zu füllen scheitere ich jedoch schon.

Ich hab ein Array mit 16 Integer Werten. Diese will ich in ein Byte Array kopieren.

Deklaration:

int adc[16];
  byte Sendbuffer[34] = { 0xFE,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 };

Wenn ich das komplette int Array in das Byte Array kopiere ist alles ok.

memcpy(&Sendbuffer[1], adc, sizeof(adc));

Ergebnis:
1 6 164 6 64 5 220 5 120 5 20 4 176 4 76 3 232 3 132 3 32 2 188 2 88 1 244 1 144 1 44 0 200 254
Das erste Byte ist immer 254 → OK
Byte 2 + 3 = 200 → OK
Byte 4 + 5 = 300 → OK
………
Byte 32 + 33 = 1700 → OK
Byte 34 soll mal die Checksum werden

Wenn ich jedoch versuche jeweils nur einen Int Wert zu kopieren läuft etwas schief.
zB.:

for (int i=0; i < 16; i++) {
    memcpy(&Sendbuffer[i*2+1], adc[i], sizeof(adc[i]));
  }

Ergebnis:
1 174 119 122 180 221 37 45 191 130 188 56 0 0 0 58 114 232 0 0 0 91 128 0 0 0 0 0 0 0 0 0 32 254

Kann mir bitte jemand sagen was ich falsch mache?
Schon mal danke im Voraus.

Wofür soll das Memcopy sein?

  int adc[16];
  Serial.write(reinterpret_cast<byte *>(&adc),sizeof(adc));

memcpy will 2 mal Pointer haben, du gibst mit adc[i] aber einen Integer, den die Funktion als Zeiger interpretiert.

Mit adc funktioniert das, da adc ein Pointer ist.

Gruß Tommy

Edit: Combie war schneller

Ich komme mir gerade ziemlich blöd vor. :blush:

Danke für die schnelle und vor allem richtige Lösung!

Mach Dir nichts draus, sowas passiert halt. Man wird dann irgendwann betriebsblind gegenüber dem eigenen Code. Das kennen wir alle zur Genüge.

Gruß Tommy