Funktion mit Rückgabewert

Hi,

finde leider keine Lösung für mein Problem. Ich hab eine Funktion, der ich zwei Werte Übergebe, wobei einer dieser Werte ein Boolean ist. In der Funktion wird der Wert der Boolean Varialblen verändert.
Wenn ich die Funktion wieder aufrufe, ist der Wert der Boolean Variablen aber immer wieder gleich.

Aufruf der Funktion

if (digitalRead(butDownWohnzimmer) == HIGH) {
Tasterabfrage(butDownWohnzimmer, downstateWohnzimmer);
}

Funktion

void Tasterabfrage(int Tastertyp, boolean Status) {

if (Status == false) {
Serial.println(Status);
Status = true;
transmitCode(Tastertyp);
Serial.println(Tastertyp);
delay(20);
}
else if (Status == true) {
Serial.println(Status);
Status = false;
transmitCode(Tastertyp);
Serial.println(Tastertyp);

delay(20);
}
}

Liegt das daran, dass die Boolean Variable erst in der Funktion selber erstellt wird?

Gruß Grave

Mach' aus

void Tasterabfrage(int Tastertyp, boolean Status) {

das da:

void Tasterabfrage(int Tastertyp, boolean &Status) {

dann macht's was du willst.

Funktion mit Rückgabewert

Das ist die falsche Sichtweise!

  1. das ist kein Rückgabewert
  2. das ist ein Funktionsparameter
  3. und zwar "Übergabe per Value"

Du wünscht dir aber:
"Parameterübergabe per Referenz"

Danke. Sowie zwieblum geschrieben hat funktioniert es.

Sowie zwieblum geschrieben hat funktioniert es.

Fein!
:o dann kann ich mein Posting ja wieder löschen :o

Wenn Du nach "Rückgabewert" fragst, vermisse ich ein return Status; in der Funktion, denn irgendwo mußt Du ja sagen, was Du zurückgeben möchtest.

Ob man einen Rückgabewert, Zeiger oder Referenzen verwendet, sollte man fein unterscheiden. Hier verbirgt sich eine der Quellen unerfindlicher Laufzeitfehler.

Hallo,

da muss ich agmue zustimmen. Das sollte man unterscheiden.
Wenn ich mir die Funktion genauer anschaue, dann macht die im Grunde folgendes zusammengekürzt

void tasterabfrage(int tastertyp, bool &status)
{
  Serial.println(status);
  status = !status;
  transmitCode(tastertyp);
  Serial.println(tastertyp);
  delay(20);
}

und das Ganze noch ohne delay

void Tasterabfrage(int Tastertyp, bool &Status) 
{
  static unsigned long last_ms = 0;
  unsigned long ms = millis();
  
  if (ms - last_ms >= 20) {
    last_ms = ms;
    Serial.println(Status);
    Status = !Status;
    transmitCode(Tastertyp);
    Serial.println(Tastertyp);
  }
}