Autor Beitrag
oOps
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mi 15.08.07 12:22 
Hallo ich bin ganz neu hier im forum, habe bereits viel hilfreiches entnehmen koennen und danke im voraus schonmal für antworten...


ich bin momentan dabei für die schule eine ampelschaltung mit einem zeitgeber zu coden...

ich hatte erst eine stunde unterricht in der hinsicht delphi...

besitze also keine brillianten vorkenntnisse... habe mich aber schon in meiner freizeit an einigen ampel probiert und das auch hinbekommen allerdings funktionert das mit dem zeitgeber nicht...

das ziel des programms ist es eine ampel zu haben die um sekundentakt wechselt also von grün nach gelb nach rot und dann wieder von rot nach rot_gelb nach gruen...


ich bin mir sicher es wird sich jemand finden der 3 minuten zeit hat und mir die frage beantworten kann wie ich das machen kann evt. die richtigen befehle posten oder vlt. sogar eine loesung falls jemand so etwas schon einmal gecodet hat...


ich bedanke mich vielmals

viele grüße basti
MurDOGG
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mi 15.08.07 12:46 
Drei Minuten Zeit hab ich keine ;) aber ein paar sekunden, schau dir mal die Timer Componente an.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 15.08.07 13:11 
Moin und :welcome: im Forum!

Schau mal hier, vielleicht kommst du damit weiter. ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
pigfacejoe
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 332
Erhaltene Danke: 1

Win 10, Ubuntu
Delphi,Javascript, PHP, Java, Python
BeitragVerfasst: Mi 15.08.07 13:18 
Hi oOps und :welcome: im Forum!

Da ich im Moent ferien habe, habe ich sogar noch mehr als 3 min zeit. Also:
Für so ne Ampelanalge sollte man Zustände verwenden. Z.b So:
Zustand 1: Ampel rot
Zustand2: Ampel rot gelb
Z3: Ampel grün
Z4: Ampel gelb.

Normalerweise macht man dann einen Zustandsübergangsgraph, in dem geregelt wird unter welcher Bedingung welcher Zustand aufgerufen wird, bei dir gibts ja nur die Bedingung Zeit, also ist das denk ich mal nicht nötig.

Diese Zustände sollen ja nach gewisser Zeit immer wieder eintreten. Also deklarieren wir am besten mal eine Variable "z" vom Typ Integer Global unter implementation, dort merken wir uns den aktuellen Zustand der Ampel.
ausblenden Delphi-Quelltext
1:
2:
implementation
var z:integer;

Jetzt mal zum Formular, ich denke wir nehmen einfach mal ein Panel und ziehen das auf das Formular , sozusagen als Hintergrund für die Ampel.
Dann nehmen wir 3 Shapes und setzten die als Lichter der Ampel auf das erste Panel. 2 Buttons mit der caption "an" bzw. aus" und 2 labels, die uns den Zustand anzeigen und einen Timer. Ungefähr so:
user defined image

Nun müssen wir noch 4 Prozeduren schreiben, die die Ampel auf die entsprechende farbe setzen.
Nennen wir sie doch ampelrot, ampelrotgelb, ampelgruen und ampelgelb.

Also:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure ampelrot;
begin
form1.shape1.brush.color:=clred;
form1.shape2.brush.color:=clblack ;
form1.shape3.brush.color:=clblack;
end;

die anderen Procedures entsprechend.

Dann gehts jetzt weiter mit der Procedure Zustandsuebergang, die wir unter der Variablendeklaration von z schreiben.
Diese regelt den Übergang von den verscheidenen Zuständen.
Also etwa so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure zustandsuebergang;
begin
with form1 do 
begin
case z of 1:begin label2.caption:='Rot';  ampelrot; form1.Timer1.Interval:=5000;z:=2end;
           2:begin label2.caption:='RotGelb'; ampelrotgelb; form1.Timer1.Interval:=3000; z:=3 end;
           3:begin label2.caption:='Grün'; ampelgruen; form1.Timer1.Interval:=5000 ; z:=4 end;
           4:begin label2.caption:='Gelb'; ampelgelb; form1.Timer1.Interval:=3000;z:=1 end;
end;
end;
end;

Jetzt nur noch die Timer Komponente namens "Timer1" aufs Formular ziehen und erstmal die Eigenschaft enabled auf false setzen. Interval auf 1.

Unter der Sparte Ereignisse nen doppelklick auf "OnTimer" und einfach zwischen begin und end zustandsuebergang schreiben.

Jetzt noch die OnClick Ereignisse der Button zuweisen.
Hier vom Einschalt Button:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
z:=1;
timer1.Interval:=1000;
timer1.enabled:=true;
label2.Caption:='Ampel eingeschaltet!';


Und hier der ausschalt Button:
ausblenden Delphi-Quelltext
1:
2:
3:
timer1.enabled:=false;
z:=2;
label2.Caption:='Ampel ausgeschaltet!';


So, das wars, deine Ampel sollte laufen. wenn du was nicht verstehst oder ich irgendwo Mist gemacht hab, schreib einfach wieder.
Schönen Gruss
Pigface Joe
oOps Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mi 15.08.07 18:30 
vielen dank an euch ist echt en klasse forum hier!

vor allem dank an pigfacejoe die loesung ist echt gut dankeschoen...


ich habs bevor die loesung gepostet war zwar ganz anders gemacht mit if then und else if schleifen was dann hinterher auch geklappt hat aber lag wohl vor allem daran das ich nicht wusste wie ich eine variable benutze was mir als erhebliche logischer vorkommt....


also vielen dank