Timer asynchrone

cs_stender Messages postés 11 Date d'inscription vendredi 12 décembre 2003 Statut Membre Dernière intervention 17 mai 2008 - 3 mai 2008 à 13:27
cs_stender Messages postés 11 Date d'inscription vendredi 12 décembre 2003 Statut Membre Dernière intervention 17 mai 2008 - 17 mai 2008 à 18:30
Bonjour,

je cherche à faire clignoter des LEDs via le port serie ça ok :

function OPENCOM(OpenString:PChar):Integer; stdcall; external 'RSCOM.DLL';
procedure CLOSECOM(); stdcall; external 'RSCOM.DLL';
procedure RTS(d:WORD); stdcall; external 'RSCOM.DLL';
procedure DTR(d:WORD); stdcall; external 'RSCOM.DLL';

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled:=True;
if SortieClgn=1 then begin
SortieClgn:=0;
end
else
begin
SortieClgn:=1;
end;
RTS(SortieClgn);   (LED1 rouge)
DTR(SortieClgn);  (LED2 verte)
end

Mon problème est d'avoir un clignotement asynchrone sur les LEDs
allumée une LED 1seconde puis éteinte 5secondes.
Puis second problème avoir alternativement (LED1 rouge) puis (LED2 verte) tout en pouvant gérer l'asynchronisme !.

des infos pour m'aiguiller ?
un composant timer tout près ?

merci d'avance

3 réponses

Utilisateur anonyme
3 mai 2008 à 17:59
Salut

A-Premiere partie :

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled:=True;<----- Ne sert à rien
if SortieClgn=1 then begin
SortieClgn:=0;
end
else
begin<----Sert à rien
SortieClgn:=1;
end;<----Sert à rien
RTS(SortieClgn);   (LED1 rouge)
DTR(SortieClgn);  (LED2 verte)
end;

Ton code est un peu caca

Procedure plus simple

procedure TForm1.Timer1Timer(Sender: TObject);

begin
  
Timer1.Enabled : =False
   SortieClg : =Not SortieClg ;//<--SortieClg est un boolean
   RTS(SortieClgn);   (LED1 rouge)
   DTR(SortieClgn);  (LED2 verte)
  Timer1.Enabled : =True;

end;

Le probleme n'est pas dans le caractere asynchrone ou non d'un timer : Ce que tu cherches à faire s'en lancer les procédures RTS(SortieClgn) et DTR(SortieClgn) en même temps.  A cela deux solutions :
1)Solution crade : jouer sur l'interval du Timer. Un interval "important" implique que tu auras le sentiment de voir les deux leds s'allumer en meme temps.
2)Méthode propre : les threads => Je te renvois sur les nombreux tutos / discussions sur le sujet.

B-Seconde partie :

1)Méthode crade

Var
RedToBeViewed : Boolean=True;

procedure TForm1.Timer1Timer(Sender: TObject);


begin
  Timer1.Enabled:=False;
  RedToBeViewed:=Not RedToBeViewed ;
  Case RedToBeViewed Of
    False : DTR(SortieClgn);
    True : RTS(SortieClgn);
  End;
  Timer1.Enabled:=True;


end;

2)Méthode propre  : les threads

Tchousss
0
cs_stender Messages postés 11 Date d'inscription vendredi 12 décembre 2003 Statut Membre Dernière intervention 17 mai 2008
3 mai 2008 à 20:35
merci pour tes infos je vais aller voir les threads si cela peu m'aider :)
0
cs_stender Messages postés 11 Date d'inscription vendredi 12 décembre 2003 Statut Membre Dernière intervention 17 mai 2008
17 mai 2008 à 18:30
Bonjour,

J'ai essayé de lire les Threads j'avoue que j'ai pas mal de mal à comprendre comment tout ça fonctionne !.

donc je vais essayer de vous poser la question suivante avec un ti dessin :)

Le but étant de comme je le disais dans mon premier message est que passer par les threads est la seule solution "propre" parce que j'avoue threads c'est quand même pas si évident que cela :(

merci d'avance pour votre aide.
0
Rejoignez-nous