Entwickler-Ecke
Sonstiges (Delphi) - Ampelsystem mit while schleife programmieren ? wie geht das
Hacker1 - Mi 21.06.06 14:24
Titel: Ampelsystem mit while schleife programmieren ? wie geht das
Hi leute ich brauche mal eure hilfe, ich habe ein ampelprojekt das ich nur mit der while funktion programmieren muss d Beschreibung unten
1. die Ampel soll durch Drücken eines Buttons in die nächste Phase schalten
2. es darf kein Timer verwendet werden
3. ich muss das ganze in einer Warteschleife schreiben.
Das bedeutet: 1. Innere Schleife mit "Delay"
2. Phasen - Schleife
3. Repeat "Taste"
also insgesamt 3 Schleifen. die ineinander geschachtelt sind.
Ich musste am Anfang mit einem fertig bearbeitetem Programm rausfinden, bei welcher Bit Nr. die Ampel in die entsprechenden farben umschalten kann.
Das Schema schreibe ich euch kurz einmal auf:
Es soll in 8 Phasen ablaufen. Ich habe eine Platte mit einem Ampelsystem an den PC angeschlossen darauf ist auch ein Knopf.
Die Ampel ist am Anfang aus. Sobald ich auf den Knopf (von der Platte) drücke wird die Ampel des Fußgängers rot und die Autoampel grün. dies soll 5 sek. dauern. Danach ist die Fußgängerampel immer noch rot und die Autoampel gelb. Nach 2 Sek. wird dann die Autoampel auf rot umgeschalten und die Fußg.ampel ist immer noch auf rot. Nach 5 sek. wird dann die Fußgängerampel grün,dies dauert 10 sek. Danach schaltet die ampel wieder auf rot, dabei stehen 2 sekunden lang alle ampeln auf rot. Bis dann die Autoampel auf gelb umschaltet, dies dauert ebenfalls 2 sek. Darauf wird dann die Autoampel wieder grün. Dabei ist die Fußgängerampel natürlich auf rot. Nach der ganzen Sache fängt das ganze wieder von vorne an.
???
Jakob Schöttl - Mi 21.06.06 14:34
Mit application.ProcessMessage; kannst du die Schleife kurz unterbrechen, und eine ereignisbehandlungsroutine von dem ampelschalter auführen lassen. darin kann z.B. eine globale variable AmpelSchalterWurdeGedrueckt := True;. Darauf kannst du dann in der schleife reagieren, denn diese wird nach der ereignisbehandlungsroutine fortgesetzt werden: if AmpelSchalterWurdeGedrueckt then NaechstePhase;
Hacker1 - Mi 21.06.06 19:10
das war jetzt net so klar
Hacker1 - Do 22.06.06 11:17
kann mir niemand helfen :-(
freak4fun - Do 22.06.06 13:54
Darf man Fragen warum ohne Timer?
Du könntest dir einen Timestamp holen und dann in der While-Schleife prüfen, ob die Zeit (2, 5 Sekunden) um ist und dann den Status der Ampeln abfragen, um zu sehen, welche Phase als nächstes kommt. Finde ich allerdings unschön.
PS: Doppelt hält besser. ;)
MfG
freak
Hacker1 - Do 22.06.06 14:48
weil alles in der while schleife erledigt werden muss
Jakob Schöttl - Do 22.06.06 15:14
Schade, dass du es noch nicht verstanden hast.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| var AmpelWurdeGedrueckt,Beenden: Boolean;
begin While not Beenden do begin Autoampel.Color := clgreen; Fussgaengerampel.Color := clred; Application.ProcessMessage; if AmpelWurdeGedrueckt then begin AutoAmpel.Color := clyellow; Sleep(2000); AutoAmpel.Color := clred; Sleep(1000); Fussgaengerampel.Color := clgreen; end; end; end;
begin Beenden := True; end;
begin AmpelWurdeGedrueckt := True; end; |
freak4fun - Do 22.06.06 16:32
Heiß aber auch, das die Anwedung nicht sofort reagiert, wenn man Beeneden drückt. Ich denke es gibt da noch bessere Lösungen. Diese mag zwar laufen aber ... Leider kann ich keine Bessere anbieten. :( Aber er holt sich ja auch noch anderswo Hilfe. ;)
MfG
freak
Jakob Schöttl - Do 22.06.06 16:49
Aber wenn er es nur in Schleifen machen darf, ohne Timer? Fällt dir was anderes ein
Hacker1 - So 25.06.06 22:31
Helft mir bitte ich hab kein plan :-(
Narses - Mo 26.06.06 00:10
Moin!
Wir sollen dir helfen, aber der Thread ist im Status "gelöst"? :gruebel: Wat denn nu? ;)
OK, hast du denn schon ein Zustandsdiagramm/Tabelle für deine Ampelanlage gemacht? Wenn nicht, dann halte ich das für den ersten Schritt. Schreib dir in einer Tabelle auf, was genau passieren soll (Zeilen: Zustände; Spalten: die einzelnen Ampeln und die Zeit, für die der Zustand gültig ist).
Wenn du das fertig hast, dann stell das mal hier rein, damit kommen wir dann weiter.
cu
Narses
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!