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
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
Gast
#4429248
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; }
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 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
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.
Gast
#4429313
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
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.