Variable zurückgeben

Hallo.

Ich benötige mal wieder eure Hilfe. Es geht diesmal um Variablen und um Funktionen.

Ich muss aus dem Loop eine Variable an eine Funktion übergeben. Soweit kein Problem. In dieser Funktion wird mit der Variable gerechnet. Nun möchte ich das Ergebnis aber wieder zurück an den Loop teil übergeben. Ich war eigentlich der Meinung, dass sollte mit " return " funktionieren. Nur bekomme ich es nicht hin.

Das ist der Code den ich habe :

int wartezeit = 3000;

void loop()
{
  
  char key = kpd.getKey();
  if(key)   
  {
    switch (key)
    {
      case 'a':
        ausloesen();
      break;

      case 'b':
        pauseplus(wartezeit);
      break;

      case 'c':
        pauseminus(wartezeit);
      break;
        
      default:
        Serial.println(key);
    }
  }
}

void pauseplus(int wartezeit)
{
  int wartezeitneu = wartezeit + 1000;
  Serial.println("Wartezeit geaendert");
  Serial.println(wartezeitneu);
}

void pauseminus(int wartezeit)
{
  int wartezeitneu = wartezeit - 1000;
  Serial.println("Wartezeit geaendert");
  Serial.println(wartezeitneu);
}

Gruß

Roland

Du musst auch eine Funktion mit Rückgabewert schreiben. void bedeutet dass nichts zurückgegeben wird

https://de.wikibooks.org/wiki/C-Programmierung:_Funktionen#Funktionsdefinition http://www.c-howto.de/tutorial-funktionen.html

Und dann musst du den Rückgabewert auch auswerten. z.B.:

wert = funktion(wert);

Alternative: Übergebe den Parameter als Referenz. Dann wird keine Kopie erstellt und Änderungen in der Funktion sind nach außen wirksam: https://de.wikibooks.org/wiki/C%2B%2B-Programmierung/_Weitere_Grundelemente/_Prozeduren_und_Funktionen#call-by-reference

Ich sehe da noch nicht einmal ein "return" ... Weiß noch nicht mal welche Funktion denn jetzt gemeint ist...

combie: Ich sehe da noch nicht einmal ein "return" ... Weiß noch nicht mal welche Funktion denn jetzt gemeint ist...

es sind die Funktionen pauseminus und pauseplus gemeint. Dort wird bei jedem Tastendruck entweder 1 sekunde abgezogen oder addiert. Die Wartezeit wurde am Anfang ja mit 3000 ( 3 Sekunden ) festgelegt.

Also der Loop überwacht mein Tastenfeld. Wenn + oder - gedrückt wird, springt das Programm in eine der Funktion und addiert bzw. zieht eine Sekunde von der Variable Wartezeit ab. Dann soll die Funktion die neue Wartezeit an den Loopteil übergeben.

Das war mein Plan

So:

void pauseplus(int& wartezeit)
{
  wartezeit += 1000;
}

Und so aufrufen:

pauseplus(wert);

ODER

int pauseplus(int wartezeit)
{
  return wartezeit + 1000;
}
wert = pauseplus(wert);

Bei der ersten Version wird nur die Adresse der Variable übergeben und auf diese zugegriffen. Bei der zweiten Version wird eine Kopie übergeben und der neue Wert zurückgereicht. Dann muss man den Rückgabewert aber auch wieder zuweisen.

Auch beachten, dass int so nur bis 16000 geht!

Das nennt sich dann wohl einmal byRef(Zeiger auf Wert) und byVal (Wert)

lg, Claus

PERFEKT !!! Vielen dank !!!

Serenifly: Auch beachten, dass int so nur bis 16000 geht!

Du meinst sicher 32000 ? (bzw. genau 32767)


int hat den Nachteil, dass es leichter zu tippen ist als unsigned, und daher gern auch für Zahlen verwendet wird, wo negative Werte keinen Sinn machen.

Noch viel besser ist übrigens, gleich mit dem richtigen Datentyp für Zeiten (  unsigned long ) zu arbeiten. Die damit darstellbaren knapp 50 Tage sollten für die allermeisten Wartezeiten reichen.

Oh ja, 32000 :( Dann ist es doch nicht sooo schlimm :p