Funktion in while nur einmal aufrufen (AVR-GCC)

OP #4429233
Lesenswert?

Hallo,

ich habe einen Code der etliche Funktionen umfasst. Der Code im AVR 
läuft in einer while(1) schleife.

Z.b. eine display_on() und display_off() funktion. Diese Funktionen 
schalten halt einen PIN auf High oder Low.

Nun soll die Funktion jedoch nur einmal ausgeführt werden. Also wenn das 
Display bereits eingeschaltet wurde nicht noch einmal "einschalten". Da 
durch den Display Reset etc. der in der ON Funktion auch ein Delay 
ausgeführt werden muss sollte dies nur einmal geschehen.

Wie mache ich das das wenn eine funktion ausgeführt wird nicht nochmal 
ausgeführt wird?

Dann noch arbeite ich viel mit if / else.

Wäre einer so nett mir an einem kurzen Beispiel switch mit case zu 
erklären?

Danke euch.
Gast #4429243
Lesenswert?

Christian B. schrieb:
> Wie mache ich das das wenn eine funktion ausgeführt wird nicht nochmal
> ausgeführt wird?
>
> Dann noch arbeite ich viel mit if / else.
>
> Wäre einer so nett mir an einem kurzen Beispiel switch mit case zu
> erklären?

Du musst dir einfach nur merken, ob das Display eingeschaltet ist oder 
nicht.

Warum sollte man das mit einer Switch Case-Abfrage behandeln, wenn 
sowieso nur zwei Zustände möglich sind?
Gast #4429248
Lesenswert?

Oliver S. schrieb:
> Das mit der while-Schleife ist prima, aber alles, was zur
> Initialisierung nur einmal beim Start des Programms aufgerufen werden
> darf, gehört vor dieses while.

Außer, wenndas Display während der While-Schleife aufgrund anderer 
Bedingungen ein-/ausgeschaltet werden soll...
OP #4429264
Lesenswert?

Also es handelt sich um etliche funktionen die "gestartet" oder 
"gestopt" werden sollen. Aber halt nur einmal.

Als beispiel:

Ein High signal an Pin X sagt Display einschalten, low sagt ausschalten.

Nun steht bei mir in der while das

wenn pin variable == 1 { display_on(); } else { display_off(); }

Das läuft durch die while und klappt auch. Jedoch wirs das Display bei 
an dann jedesmal "resetet" und die "defines" wie schriftart etc neu ins 
display geschrieben. Dies soll jedoch nur einmal erfolgen.

Also suche ich eine art die dann sagt. Display wurde eingeschaltet muss 
nicht nochmal eingeschaltet werden sondern erst wenn es aus war / ist.

Und das muss eben in der while erfolgen.
#4429277
Lesenswert?

Christian B. schrieb:
> Wie mache ich das das wenn eine funktion ausgeführt wird nicht nochmal
> ausgeführt wird?

Generell: Mit einem Flag, also einer Hilfsvariablen.

Zum Beispiel so:
1
// Initialisierung zu Beginn des Programms
2
bool display_was_set = false;
3

4
// Dazwischen steht irgend ein anderer Code
5

6
// Jetzt wird die Hilfvariable abgefragt
7
if (display_was_set == false)
8
{
9
    set_the_display();
10
    display_was_set = true;
11
}


Siehe auch:
https://de.wikipedia.org/wiki/Flag_%28Informatik%29
#4429279
Lesenswert?

Der E. schrieb:
> Christian B. schrieb:
>> wenn pin variable == 1 { display_on(); } else { display_off(); }
>
> Wie wärs zb so:
>
> if (pin_variable == 1 && Display_an==0) { display_on(); Display_an=1; }
> if (pin_variable == 0 && Display_an==1){ display_off();Display_an=0; }

Oder auch:

if (pin_variable != Display_an)
{
  if (Display_an == 1)
  {
    display_off();
  }
  else
  {
    display_on();
  }
  Display_an = pin_variable;
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren