Du unterschätzt den selbstoptinierenden Kompiler, der solche Gedankengänge gerne durchkreuzt. Außerdem kann es nützlich sein, die Berechnung der Anzahl der Feldelemente zu überprüfen, weil sonst Speicher unerlaubt überschrieben werden kann, was C++ zur Laufzeit nicht abfängt.
Mein Vorschlag:
void setup() {
Serial.begin(9600);
Serial.println(F("Start"));
rain(1);
}
void loop() {}
void readRainPixel(uint8_t site, uint8_t arrRainPixel[], const uint8_t sizRainPixel, int8_t arrChanger[], const uint8_t sizChanger) {
for (uint8_t i = 0; i < sizChanger; i++) {
for (uint8_t j = 0; j < (sizChanger - 1); j++) {
if (i * (sizChanger - 1) + j < sizRainPixel) arrRainPixel[ i * (sizChanger - 1) + j ] = 1 + i + j;
}
uint8_t upsite = site;
arrChanger[i] = upsite + i;
}
}
void rain(byte site) {
const uint8_t anzRainPixel = 12;
uint8_t rainPixel[anzRainPixel];
const uint8_t anzChanger = 4;
int8_t changer[anzChanger];
readRainPixel(site, rainPixel, anzRainPixel, changer, anzChanger);
for (uint8_t i = 0; i < anzRainPixel; i++) {
Serial.print(F("rainPixel ")), Serial.print(i), Serial.print(": "); Serial.println(rainPixel[i]);
}
for (uint8_t i = 0; i < anzChanger; i++) {
Serial.print(F("Changer ")), Serial.print(i), Serial.print(": "); Serial.println(changer[i]);
}
}
Ob sizChanger bei der Berechnung überall richtig eingesetzt ist, überlasse ich Deiner Beurteilung ![]()
Eine Funktion liefert ja ein Objekt zurück. Das kann alles mögliche sein.
Du rufst beim Getränkeservice an und bestellst eine Flasche Bier. Die wird im Wagen (=Objekt) geliefert. Entspricht einer Variablen.
Jetzt bestellst Du einen Kasten Bier, das ist ein Feld gleichartiger Elemente.
Oder Du bestellst einen Kasten Bier und eine Flasche Korn, das wäre eine Struktur aus einem Feld (Kasten Bier) und einer Variablen (Korn), alles in einem Objekt (Auto) geliefert.
Prost! Oder #27 unters Kopfkissen legen!