Inzwischen habe ich verstanden was du meintest. Ich habe die Funktion aufgerufen, ohne einen Typ davor zu schreiben. Da ich so aber nur einen Wert über return zurück geben kann, hatte ich es anders versucht. Vielleicht war der Titel irreführend. Denn ich gebe ja, so wie ich es ausführen wollte, keine Variablen zurück sondern ändere sie in der Funktion. Sorry für das Missverständnis. Aber als Anfänger findet man ab und zu nicht die richtigen Worte.
combie, deine Beispiele sind wahrscheinlich sehr gut, aber da fehlt mir noch viel Verständnis. Befehle wie:
auto
template
typename
cout
endl
F
sagen mir noch nicht wirklich viel. Da muss ich mich erst nochmal vertiefen. auto
erstellt glaube ich den Variablentyp automatisch anhand des übergeben Wertes. cout
und endl
sind glaube ich Ausgabe für die Konsole. Kann man das in der Arduino IDE verwenden? Hab ich nicht probiert. In Videos mit Visuel Studio Code hatte ich das öffters gesehen, und da wird das in einem Fenster ausgegeben. F
kenne ich von Serial.print
damit der Text nicht im RAM sondern Progmem geschrieben wird. template
und typename
sind mir noch völlig unbekannt.
So wie die Zeit es her gab (und das ist oft nicht viel), habe ich mich mit Zeigern beschäftigt. Einiges gelesen, einige Videos angeschaut. Und ja, ich habe es jetzt hinbekommen. Danke für das schupsen Richtung Zeiger. Obwohl es da wahrscheinlich noch viel Übung braucht, bis es sitzt wann &
und *
verwendet wird. Ich haue das oft durcheinander, bzw. ist es schwierig zu folgen ob Adresse oder Wert gebraucht wird.
void setup() {
Serial.begin(9600);
rain(1);
}
void loop() {
}
void readRainPixel(uint8_t site, uint8_t *ptrRainPixel, int8_t *ptrChanger){
for(uint8_t i=0; i<4; i++){
for(uint8_t j=0; j<3; j++){
*(ptrRainPixel + i*3+j) = (1 + i + j);
}
uint8_t upsite = site;
*(ptrChanger + i) = (upsite + i);
}
}
void rain(byte site){
uint8_t rainPixel[12];
int8_t changer[4];
readRainPixel(site, &rainPixel[0], &changer[0]);
for(uint8_t i=0; i<12; i++){
Serial.print("rainPixel "), Serial.print(i), Serial.print(": ");Serial.println(rainPixel[i]);
}
for(uint8_t i=0; i<4; i++){
Serial.print("Changer "), Serial.print(i), Serial.print(": ");Serial.println(changer[i]);
}
}
Ich habe in rain()
zwei Variablen Arrays die ich in readRainPixel()
ändern kann.
Ich weis das ich
readRainPixel(site, &rainPixel[0], &changer[0]);
auch so schreiben kann
readRainPixel(site, rainPixel, changer);
da der Name des Arrays gleichzeitig der Zeiger auf den ersten Wert des Arrays ist. Da ich dann aber vielleicht in ein paar Monaten vor der Zeile stehe, und das nicht mehr weis, habe ich mich für die ausführliche Schreibweise entschieden. Zumindest bis sich das erstmal gefestigt hat.
Danke für eure investierte Zeit und das schupsen.
Wenn es in dem kurzen Code Beispiel ein paar Dinge gibt, die man nicht so machen sollte, wäre es nett, wenn ihr mich darauf hinweisen könntet, und vielleicht auch erwähnen könntet warum man das so macht.
Gruß