Integer an Funktion übergeben

Hallo zusammen,

ich habe für die Funktion "Laufschrift" zwei Globale Integer, die aber nur in dieser einen Funktion verwendet werden, einmal x und last_x. Solange diese Global bleiben, funktioniert die Laufschrift wunderbar. Sobald ich aber einen der beiden nur Funktionsbezogen setze, sehe ich nichts mehr von Text.
Kann mir mal Jemand erklären warum dies so ist? Ich würde gern den Wert x mit Funktionsaufruf übergeben.

So funktioniert es:

String Text_Strg = "Das ist ein Test.";

int x = 64;
int last_x;

void Laufschrift (String Strg, int y){

  int l = Strg.length();
  int Strg_laenge = (l *6) - (l *12);
  static unsigned long last_ms = 0;
  unsigned long ms = millis();

  if (last_x != x){
    dma_display->setTextColor(dma_display->color565(0, 0, 0));
    dma_display->setCursor(last_x,y);
    dma_display->print(Strg);
  } else {
    dma_display->setTextColor(dma_display->color565(0, 255, 255));
    dma_display->setCursor(x,y);
    dma_display->print(Strg);
  }

  last_x = x;
  if (x <= Strg_laenge){
    last_x = 64;
  }

  if (ms - last_ms <= 100)  return;
  last_ms = ms;
  x = last_x - 1;

}

void loop() {

  Laufschrift(Text_Strg, 8);

}

Und so bleibt das Display leer:

String Text_Strg = "Das ist ein Test.";

int last_x;

void Laufschrift (String Strg, int x, int y){

  int l = Strg.length();
  int Strg_laenge = (l *6) - (l *12);
  static unsigned long last_ms = 0;
  unsigned long ms = millis();

  if (last_x != x){
    dma_display->setTextColor(dma_display->color565(0, 0, 0));
    dma_display->setCursor(last_x,y);
    dma_display->print(Strg);
  } else {
    dma_display->setTextColor(dma_display->color565(0, 255, 255));
    dma_display->setCursor(x,y);
    dma_display->print(Strg);
  }

  last_x = x;
  if (x <= Strg_laenge){
    last_x = 64;
  }

  if (ms - last_ms <= 100)  return;
  last_ms = ms;
  x = last_x - 1;

}

void loop() {

  Laufschrift(Text_Strg, 64, 8);

}

Vielen Dank schon mal im Vorraus

Das hat im zweiten Fall keine Auswirkung.
Wenn du x ändern willst für den nächsten Aufruf von Laufschrift, kann das kein Parameter sein, der als Wert übergeben wird und schon gar keine konstante 64.
Wenn's nicht global sein soll, gibt's auch static lokale Variable.

:man_facepalming: jetzt ist der Groschen gefallen. Ich übergebe ja immer wieder den selben wert, somit kann er ja nicht weniger werden und der Text bleibt einfach nur wo er ist.

Vielen dank für den Denkanstoß :slight_smile:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.