Problém "běžící světlo" – Delphi – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Problém "běžící světlo" – Delphi – Fórum – Programujte.comProblém "běžící světlo" – Delphi – Fórum – Programujte.com

 

BundasCZ
~ Anonymní uživatel
2 příspěvky
2. 10. 2009   #1
-
0
-

Zdravím všechny, potřeboval bych poradit. Bude to asi triviální, ale nějak jsem se zasekl.

Jedná se o to, že když změnšuji hodnotu Timeru (času), tak se cykl mění jen v hodnotách 16, 32, 48, pak už asi plynule. Potřebuji zkrátit (zrychlit) cykl , ale když ho zmenším pod 16, tak už se světlo běží stejně. Udělal jsem prográmek, který mě ukazuje cykl (bězící světlo) a je to i vidět že se již nezrychluje.

------------------------------

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Spin, ComCtrls;

type
TForm1 = class(TForm)
Shape1: TShape;
Shape2: TShape;
Shape3: TShape;
Shape4: TShape;
Timer1: TTimer;
Button1: TButton;
Label1: TLabel;
Shape5: TShape;
Button2: TButton;
Button3: TButton;
Label2: TLabel;
Timer2: TTimer;
UpDown1: TUpDown;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
private
{ Private declarations }
Stav:integer;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var t:Integer;
begin
Stav:=0;
t:=UpDown1.Position;
Label1.Caption:= IntToStr(t);
end;


//------------ chod vpřed -----------------

procedure TForm1.Timer1Timer(Sender: TObject);
var t:Integer;


begin
//t:=spinedit1.value;
t:=UpDown1.Position;
Label1.Caption:= IntToStr(t);
case Stav of

0:begin
//Label1.Caption:=IntToStr (1);
val:=1;
Shape5.Brush.Color:=clBlack;
Shape2.Brush.Color:=clYellow;
Timer1.Interval:=t;
end;

1:begin
//Label1.Caption:=IntToStr(2);
val:=3;
Shape2.Brush.Color:=clBlack;
Shape3.Brush.Color:=clYellow;
Timer1.Interval:=t;
end;

2:begin
//Label1.Caption:=IntToStr(3);
val:=6;
Shape3.Brush.Color:=clBlack;
Shape4.Brush.Color:=clYellow;
Timer1.Interval:=t;
end;

3:begin
//Label1.Caption:=IntToStr(4);
val:=12;
Shape4.Brush.Color:=clBlack;
Shape5.Brush.Color:=clYellow;
Timer1.Interval:=t;
end;
end;


// asm
//mov dx,$378
//mov al,val
//out dx,al
// end;

Stav:=(Stav+1) mod 4;
end;

//------------ Tlačítko Vpřed ----------

procedure TForm1.Button1Click(Sender: TObject);
var a:Integer;
begin
Timer1.Enabled:=true;
Timer2.Enabled:=false;

end;

//------------ Tlačítko Stop ---------------

procedure TForm1.Button2Click(Sender: TObject);
begin
Timer1.Enabled:=false;
Timer2.Enabled:=false;
Shape2.Brush.Color:=clBlack;
Shape3.Brush.Color:=clBlack;
Shape4.Brush.Color:=clBlack;
Shape5.Brush.Color:=clBlack;
Stav:=0;
end;

//------------ Tlačítko Vzad -------------------

procedure TForm1.Button3Click(Sender: TObject);
begin
Timer1.Enabled:=false;
Timer2.Enabled:=true;

end;

//------------ chod vzad -----------------

procedure TForm1.Timer2Timer(Sender: TObject);
var t:Integer;


begin
t:=UpDown1.Position;
case Stav of
0:begin

Label2.Caption:=IntToStr (1);
Shape2.Brush.Color:=clBlack;
Shape5.Brush.Color:=clYellow;
Timer2.Interval:=t;
end;
1:begin
Label2.Caption:=IntToStr(2);
Shape5.Brush.Color:=clBlack;
Shape4.Brush.Color:=clYellow;
Timer2.Interval:=t;
end;
2:begin
Label2.Caption:=IntToStr(3);
Shape4.Brush.Color:=clBlack;
Shape3.Brush.Color:=clYellow;
Timer2.Interval:=t;
end;
3:begin
Label2.Caption:=IntToStr(4);
Shape3.Brush.Color:=clBlack;
Shape2.Brush.Color:=clYellow;
Timer2.Interval:=t;
end;

end;
Stav:=(Stav+1) mod 4;
end;

end.



---------------------------------------------

Label1.Caption:= IntToStr(t); ----- tady zobrazuji hodnotu času abych věděl kolik je nastaneno

t:= spinedit1.value ----- byl původní záměr, ale ani toto nefungovalo podle představ

Label2.Caption:=IntToStr (1); ----- to abych věděl kde se nachází smyčka

t:=UpDown1.Position; ----- ovládání času timeru

Prodblém přetrvává i když jsem zakázal ovládání portu.

-------------------------------------------

Můžete na to prosím kouknout nebo vymyslet fungující řešení?? Pokud toto slustím je vidět markantní rozdíl v rychlosti(32-31, další skok je 16-15 ---- když měním hodnotu "t").
Dík za pomoc .

Nahlásit jako SPAM
IP: 90.179.8.–
KIIV
~ Moderátor
+43
God of flame
2. 10. 2009   #2
-
0
-

ono vykreslovani jako takove neco trva... a pokud to trva dele nez to casovani tak se proste zrychlovani zastavi na maximalni mozne rychlosti co z toho vytahas

Nahlásit jako SPAM
IP: 80.188.94.–
Program vždy dělá to co naprogramujete, ne to co chcete...
BundasCZ
~ Anonymní uživatel
2 příspěvky
5. 10. 2009   #3
-
0
-

Zdravím a dík za odpověď, ale pochopil bych to kdyby to bylo při nejrychlejším cyklu, ale skoková změna se mění po 16. Vždy když přejdu a násobkem je 16 dojde ke změně. Ještě zkusím změřit čítačem frekvence při vyšším času. Vložil jsem soubor ale musí se přejmenovat na EXE.

Nahlásit jako SPAM
IP: 90.179.8.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 2 hosté

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý