IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants VCL Delphi Discussion :

[TComPort]Communication Bluetooth (RS232)


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 11
    Par défaut [TComPort]Communication Bluetooth (RS232)
    Bonjour,

    Je cherche à initialiser la communication entre deux modules Bluetooth. L'un de mes module est relié à une convertisseur vers RS232 ce qui me permets de configurer ce module via un hyperterminal.

    Tout marche normalement avec hyperterm.

    Néanmoins, j'essaie de gérer pour le moment l'initialisation de la communication à l'aide d'un soft en Delphi (composant TComPort). Voici une partie de mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure TForm1.btBT_connectClick(Sender: TObject); 
    var
      BT_Trame:array[1..13] of char;
    begin
      ComPort1.OnRxChar:=nil;
      ComPort1.WriteStr(#$02#$52#$26#$00#$00#$78#$03); // Reset le Bluetooth
      Sleep(1000);
      ComPort1.Read(BT_Trame,13);
      EcrireFichier(BT_Trame);
      if(BT_Trame=#$02#$69#$25#$06#$00#$94#$05#$30#36#$32#$33#$00#$03) then
      begin
        ComPort1.WriteStr(#$02#$52#$32#$06#$00#$8A#$FC#$3F#$65#$E8#$00#$10#$03); // Connexion SDAP
        ComPort1.Read(BT_Trame,8);
    .........

    Quand j'observe à l'aide du debugger ce que je recois (la variable "BT_Trame"), j'ai bien la trame que je souhaite mais mon problème est la condition suivante ne passe pas !

    Est ce que qulqu'un voit le problème ?

    Enfin, j'utilise un Sleep parce qu'auparavant, je n'avais pas le temps de récupérer la trame voulue. N'y aurait il pas un autre moyen pour gérer la reception plus proprement ?

    Merci d'avance

    PS : Pour la lecture des trames recues, je n'utilise pas l'événement OnRXChar parce que je l'utilise déjà dans mon problème. C'est pour cela que je bloque l'événement au debut de ma fonction)

  2. #2
    Membre éprouvé
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Par défaut
    Salut,

    Je me souviens avoir pas mal galéré avec le TComPort pendant mon projet de BTS (2004). J'ai fini par le faire comme ça en C++ Builder (très proche du Delphi) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    void __fastcall TFPrincipale::ComPort1RxChar(TObject *Sender, int Count)
    {
    	AnsiString Trame;
    	ComPort1->ReadStr( Trame, Count );
    	if( Trame.AnsiPos( "\3" ) > 0 )
    	{
    		TrameOK = TrameOK + Trame;
    		Trait->DetectionTypeTrame();
    		TrameOK = "";
    	}
    	else
    	{
    		TrameOK = TrameOK + Trame;
    	}
    }
    Avec une petite classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    RS422::RS422( TComPort *Composant, AnsiString PortCOM, TBaudRate Vitesse, TDataBits TailleData, TStopBits Bit2Stop, TParityBits Parite, TFlowControl Controle2Flux )
    {
    	RS422 = Composant;
    	// Configuration du port
    	RS422->Port = PortCOM;
    	RS422->BaudRate = Vitesse;
    	RS422->DataBits = TailleData;
    	RS422->StopBits = Bit2Stop;
    	RS422->Parity->Bits = Parite;
    	RS422->FlowControl->FlowControl = Controle2Flux;
    }
     
    int RS422::Ouverture( void )
    {
    	// Ouverture du port
    	try
    	{
    		RS422->Open();
    		return( 1 );
    	}
    	catch( Exception &Exp )
    	{
    		MsgErreur = Exp.Message;
    		return( 0 );
    	}
    }
     
    int RS422::EnvoyerTrame( AnsiString Trame )
    {
    	// Envoyer la trame sur le port
    	try
    	{
    		FPrincipale->Sauvegarde_Message;
    		RS422->WriteStr( Trame );
    		return( 1 );
    	}
    	catch( Exception &Exp )
    	{
    		MsgErreur = Exp.Message;
    		return( 0 );
    	}
    }
     
    AnsiString RS422::RecevoirTrame( void )
    {
    	AnsiString Trame = "";
    	int Taille;
    	Taille = RS422->InputCount();
    	RS422->ReadStr( Trame, Taille );
    	return( Trame );
    }
     
    void RS422::Erreur( void )
    {
    	// Affichage de l'erreur
    	MessageDlg( MsgErreur, mtError, TMsgDlgButtons() << mbOK, 0 );
    }
     
    int RS422::Fermeture( void )
    {
    	// Fermeture du port
    	try
    	{
    		RS422->Close();
    		return( 1 );
    	}
    	catch( Exception &Exp )
    	{
    		MsgErreur = Exp.Message;
    	return( 0 );
    	}
    }
    Initialisée comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    InitializeCriticalSection( &FPrincipale->Semaphore );
    S422 = new RS422( FPrincipale->ComPort1, "COM2", Cport::br9600, dbEight, sbOneStopBit,prNone, fcNone );
    if( !S422->Ouverture() )
    {
    	S422->Erreur();
    	Application->Terminate();
    }
    LogTrame( FPrincipale->Divers_Init );
    if( !S422->EnvoyerTrame( FPrincipale->Divers_Init ) )
    {
    	S422->Erreur();
    	Application->Terminate();
    }
    Ci-joint les fichiers complets :
    Projet BTS 2004.ppt
    Projet BTS 2004.pdf

    Cordialement,
    ZiP

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 11
    Par défaut
    Merci pour ton projet ! Mais mon problème se situe surtout sur le if qui ne fonctionne pas correctement alors que quand je suis la valeur de ma variable BT_Trame, j'ai exactement la même trame que je teste dans la condition...

    Est ce qu'il n'y a pas une erreur dans le format de ma condition ?

    Merci

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 11
    Par défaut
    Personne dne voit de solution ?
    J'ai remplacé Read par ReadStr tout en changeant le type de vriable pour BT_Trame (String).

    Les conditions ne sont toujours pas validées.........

Discussions similaires

  1. communication bluetooth avec java
    Par subzero01 dans le forum Multimédia
    Réponses: 0
    Dernier message: 15/01/2009, 15h22
  2. Réponses: 0
    Dernier message: 05/01/2009, 12h08
  3. Problème de communication Serie rs232
    Par marcootz dans le forum C++
    Réponses: 5
    Dernier message: 14/04/2008, 18h33
  4. Communication avec RS232
    Par Benji59 dans le forum VB.NET
    Réponses: 4
    Dernier message: 09/04/2008, 19h06
  5. Communication bluetooth avec un PC
    Par amel666 dans le forum Java ME
    Réponses: 2
    Dernier message: 04/05/2007, 10h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo