Autor |
Beitrag |
Hacker1
Hält's aus hier
Beiträge: 6
|
Verfasst: Mi 21.06.06 14:24
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
      
Beiträge: 929
Erhaltene Danke: 1
Delphi 7 Professional
|
Verfasst: 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 
Hält's aus hier
Beiträge: 6
|
Verfasst: Mi 21.06.06 19:10
das war jetzt net so klar
|
|
Hacker1 
Hält's aus hier
Beiträge: 6
|
Verfasst: Do 22.06.06 11:17
kann mir niemand helfen 
|
|
freak4fun
      
Beiträge: 604
Erhaltene Danke: 4
Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
|
Verfasst: 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
_________________ "Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen
|
|
Hacker1 
Hält's aus hier
Beiträge: 6
|
Verfasst: Do 22.06.06 14:48
weil alles in der while schleife erledigt werden muss
|
|
Jakob Schöttl
      
Beiträge: 929
Erhaltene Danke: 1
Delphi 7 Professional
|
Verfasst: Do 22.06.06 15:14
Schade, dass du es noch nicht verstanden hast.
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
      
Beiträge: 604
Erhaltene Danke: 4
Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
|
Verfasst: 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
_________________ "Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen
|
|
Jakob Schöttl
      
Beiträge: 929
Erhaltene Danke: 1
Delphi 7 Professional
|
Verfasst: Do 22.06.06 16:49
Aber wenn er es nur in Schleifen machen darf, ohne Timer? Fällt dir was anderes ein
|
|
Hacker1 
Hält's aus hier
Beiträge: 6
|
Verfasst: So 25.06.06 22:31
Helft mir bitte ich hab kein plan 
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 26.06.06 00:10
Moin!
Wir sollen dir helfen, aber der Thread ist im Status "gelöst"?  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
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|