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.
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?
Wenn du eine Funktion nur einmal aufrufen willst, dann rufe sie nur einmal auf. 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. Oliver
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...
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.
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; }
:
Bearbeitet durch User
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
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; }
Ja genau sowas. Manchmal sind es nur "denkfehler". Bzw. logisches denken ;) Und dann wird mir immer gesagt if/else braucht mehr takte als ein switch mit case. Daher die frage/n.
Christian B. schrieb: > Und dann wird mir immer gesagt if/else braucht mehr takte als ein switch > mit case. Und das siehst du dem Display an, dass es 5µs später einschaltet? Und selbst wenn, wen juckts? Georg
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.