Da sich Arrays irgendwie nicht so wie in den anderen Programmiersprachen verhalten die ich kenne,
suchte ich nach einer Lösung dieses ganze Array, ArrayGröße, Pointer, Speicherbereich-Dingens zu
verstehen, um mehrere Arrays miteinander zu verbinden, um dann Teile des Arrays auszutauschen.
Dabei bin ich auf diesen Beitrag:
https://forum.arduino.cc/index.php?topic=321002.15
gestoßen, der das eigentlich ganz einleuchtend erklärt und bei dem es auch zu funktionieren scheint.
also hab ich das als Grundlage genommen und wollte diese Konstrukt mit noch mehr Arrays erweitern.
Dann allerdings funktioniert es wieder nicht und die Ausgabe mixed den finalArray Array komisch zusammen...
Irgendwo muss also ein Fehler sein, den ich - vermutlich aus Unkenntnis und Unverständnis- nicht selbst finde
und deshalb auch nicht lösen kann.... hilfe wäre also sehr willkommen.
hier ist der dazu gehörige Code.
meine Arrays:
int CC_PerformerBank1[16] = {74,21,73,28,75,24,77,29,71,27,72,25,76,23,22,26};
int CC_CenterPotis[12] = {35,34,33,32,31,30,41,40,39,38,37,36};
int CC_ADSR_Env1[4] = {14,13,12,11};
int CC_ADSR_Env2[4] = {18,17,16,15};
int CC_ADSR_Env3[4] = {95,94,93,92};
int CC_ADSR_Env4[4] = {99,98,97,96};
int CC_Normalizer[12] = {50,51,52,53,46,47,48,49,42,43,44,45};
int controllerArray[48];
void combineArrays(int* Array1,int arry1Size, int* Array2, int arry2Size, int* Array3,int arry3Size, int* Array4, int arry4Size, int* Array5,int arry5Size, int* finalArray)
{
memcpy(&finalArray[0], Array1, arry1Size);
memcpy(&finalArray[arry1Size/sizeof(Array1[0])], Array2, arry2Size);
//memcpy(&finalArray[(arry2Size/sizeof(Array2[0]))+4], Array3, arry3Size);
//memcpy(&finalArray[arry3Size/sizeof(int)], Array4, arry4Size);
//memcpy(&finalArray[arry4Size/sizeof(int)], Array5, arry5Size);
}
und mit
combineArrays(CC_PerformerBank1, sizeof(CC_PerformerBank1), CC_CenterPotis, sizeof(CC_CenterPotis), CC_ADSR_Env1, sizeof(CC_ADSR_Env1), CC_ADSR_Env2, sizeof(CC_ADSR_Env2), CC_Normalizer, sizeof(CC_Normalizer), controllerArray);
ruf dann die Funktion auf.
Also im Grunde, wenn ich nichts übersehen habe, alles wie in dem Beispiel vom oben genannten Beitrag.
Wie man sieht, sind in der Funktion memcpy 3,4 & 5 auskommentiert.
So erhalte ich das erwartete Ergebnis.
mit
Serial.println(" S T A R T ");
for(int n=0; n < 48; n++)
{
Serial.println(controllerArray[n]);
}
Serial.println(" ");
Serial.println(" E N D ");
Serial.println(" ");
prüfe ich das Ergebnis
und
Die Ausgabe ist dann wie erwartet
S T A R T
74
21
73
28
75
24
77
29
71
27
72
25
76
23
22
26
35
34
33
32
31
30
41
40
39
38
37
36
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
E N D
sobald ich das dritte Array freischalte , da mischt sich das Ergebnis ganz merkwürdig und ich erhalte:
S T A R T
74
21
73
28
75
24
77
29
71
27
72
25
14
13
12
11
35
34
33
32
31
30
41
40
39
38
37
36
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
E N D
... es wird also nicht an der richtigen Stelle hinzugefügt und auch nicht der komplette Array....