Ampelsystem

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
NiNanny
Beiträge: 4
Registriert: Sa 9. Mär 2013, 16:34

Ampelsystem

Beitrag von NiNanny »

Hey Leute,

ich bin ein totaler anfänger was programmieren angeht. Jetzt haben wir in der Schule die Aufgabe bekommen ein Ampelsystem zu entwerfen. Mit Autos und Fußgängern. Wir sollen das programm über einen Button starten, also die timer1.enabled:=true; und dann die timer so programmieren das die Ampeln von rot zu gelb und dann zu grün wechseln. Ich weiß leider nicht wie man einen Timer programmiert. Bitte helft mir! :(

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Ampelsystem

Beitrag von Michl »

Also die Aufgaben lösen wir hier nicht :( . Lösungsansätze gibt es bei der Suche in vielen Foren (auch hier)!

Wenn Du an einer kongreten Stelle nicht weiterkommst und evtl. schon etwas Code posten kannst, wird Dir hier sicherlich gern geholfen!

Als Hinweis: mit >timer1.enabled:=true< hast Du bereits den Timer aktiviert und als kleine Hilfestellung: bei Timer-Ereignis OnTimer kann eine gewüschte Operation/Procedure ausgeführt werden!

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

u-boot
Beiträge: 308
Registriert: Do 9. Apr 2009, 10:10
OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 785..

Re: Ampelsystem

Beitrag von u-boot »

Die Farbe geht übrigens von Rot auf Rot-Gelb und dann auf Grün. Von Grün zurück ist es nur Gelb und dann Rot ....
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)

NiNanny
Beiträge: 4
Registriert: Sa 9. Mär 2013, 16:34

Re: Ampelsystem

Beitrag von NiNanny »

Code: Alles auswählen

procedure TfmKreuzung.Timer1Timer(Sender: TObject);
begin
  if(122=1) and (ImAb.left<600) then
  begin
    ImAb.left:=ImAb.left+1;
  end;
end;
 
procedure TfmKreuzung.btStartClick(Sender: TObject);
begin
  timer1.enabled:=true;
end;
 
end.          
Da passiert nichts! :(
Was mach ich falsch?
Zuletzt geändert von Lori am Mo 11. Mär 2013, 16:48, insgesamt 1-mal geändert.
Grund: Bitte den Highligher verwenden

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Ampelsystem

Beitrag von Michl »

Code: Alles auswählen

if(122=1) and (ImAb.left<600) then
Die Abfrage "if" und dann "122=1" wird nie funktionieren, da 122 niemals 1 ist!!! - Ist wahrscheinlich nur ein Schreibfehler!

Schreib doch zum überprüfen Deines Timers erstmal etwas wie >Form1.Caption:=inttostr(random(1000));<, dann siehst Du auf jeden Fall erst einmal, ob Dein Timer funktioniert und er etwas macht. Dann kannst Du das ja wieder löschen und einen für Dich passenderen Code schreiben :)

Also:

Code: Alles auswählen

procedure TfmKreuzung.Timer1Timer(Sender: TObject);
begin
  Form1.Caption:=inttostr(random(1000));     //Schreibt in die Titelzeile Deiner Form ein zufälligen Zahlwert zwischen 0 bis 999
end;

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

NiNanny
Beiträge: 4
Registriert: Sa 9. Mär 2013, 16:34

Re: Ampelsystem

Beitrag von NiNanny »

Da passiert nichts und ich weiß nicht wie man das anders macht. Ist aber egal ich versuch es anders.

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Ampelsystem

Beitrag von Michl »

Der Reihe nach:

TTimer von der Komponentenpalette auswählen und auf Deiner Form plazieren.
Im Objektinspektor unter Ereignisse OnTimer auf den Button mit den drei Punkten klicken -> es wird automatisch eine Procedure TForm1.Timer1Timer(Sender: TObject) estellt.
Dort den gewünschten Code schreiben (zum Testen evtl den: Form1.Caption:=inttostr(random(1000));)

Nun muss nur noch der Timer gestartet werden z.B. bei einem Klick auf einem Button!
Selbes Vorgehen: TButton von der Komponentenpalette wählen und in Form plazieren.
Im Objektinspektor unter Ereignisse OnClick auf den Button mit den drei Punkten klicken -> es wird automatisch eine Procedure TForm1.Button1Click(Sender: TObject) erstellt.
Dort noch folgenden Code einfügen: timer1.Enabled:=true;

Fertig!

Jetzt kann Dein Programm gestartet werden. Beim Klick auf den Button wird der Timer gestartet (vordefiniert ist der Intervall 1000) und damit ca jede Sekunde 1x Dein Code ausgeführt.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

NiNanny
Beiträge: 4
Registriert: Sa 9. Mär 2013, 16:34

Re: Ampelsystem

Beitrag von NiNanny »

Danke, es funktioniert jetzt.

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Ampelsystem

Beitrag von pluto »

Such mal nach Paintbox, Image und Canvas. Das sind ganz hilfreiche "Werkzeuge" für dein Vorhaben.

Möchtest du eine Ampel auch Grafisch da stellen z.b. einfach über drei Kreise die quasi Eine Einheit bilden?
MFG
Michael Springwald

Antworten