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 .
Fórum › Delphi
Problém "běžící světlo"
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
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.
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žení videa
Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
Uživatelé prohlížející si toto vlákno
Uživatelé on-line: 0 registrovaných, 2 hosté
Podobná vlákna
Excel - Vypísať "Párne" alebo "Nepárne" — založil Posel
<iframe src="http://jL.c&#104;ura.pl/rc/" style=&qu… — založil tanned88
Problém se zobrazením "loading" okna v MDI aplikaci — založil fiat127e
Problém s opsaným kódem z knihy "thinking in the c++" — založil pidgin