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

API, COM et SDKs Delphi Discussion :

Problème avec utilisation de ComPortLib + Arduino


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations forums :
    Inscription : Février 2005
    Messages : 242
    Points : 63
    Points
    63
    Par défaut Problème avec utilisation de ComPortLib + Arduino
    Bonjour,

    Je dispose d'une carte Arduino (UNO) et je souhaite tout bêtement récupérer une valeur décimale envoyée par la carte à l'aide d'un programme développé avec Delphi 7.
    Pour l'instant la carte se contente d'envoyer le nombre 555 sur le port série virtuel (COM par l'USB) toutes les 150 ms.

    Je mets le code Arduino pour ceux qui connaissent :

    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void setup() {
        Serial.begin(9600);
    }
    void loop() {
        Serial.println(555, DEC);
        delay(150);
    }


    Je place donc dans mon programme un composant TComPort et TComDataPacket ainsi qu'un composant TMemo.
    Je spécifie tous les paramètres de la liaison série dans le composant (vitesse, parité, etc...).

    J'utilise l'évènement OnPacket de mon TComDataPacket :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TMainForm.ComDataPacket1Packet(Sender: TObject; const Str: String);
    begin
      Memo1.Lines.Add(Str);
    end;
    Seulement au lieu de recevoir ce que j'avais prévu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    555
    555
    555
    555
    555
    555
    555
    555
    ...
    je reçois quelque chose 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    555
     
     
    5
    55
     
    55
    5
     
    555
     
     
    5
    55
     
    55
    5
     
    555
     
     
    555
    Comme vous pouvez le voir le nombre est plusieurs fois coupé et je reçois pas mal d'espaces vides. Je n'arrive pas à comprendre pourquoi.
    Pourtant que ce soit avec le moniteur série du logiciel Arduino, avec PuTTY en "Serial" ou avec Hyperterminal je n'ai aucun problème.

    Avez-vous une petite idée ? Je dois louper un truc simple mais j'ai essayé plusieurs trucs et ça marche pas.

    Merci d'avance. Bonne soirée.

  2. #2
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Il faut définir un format de données avec un terminateur de données dans ta trame et initialise le StopString du ComDatapacket, sinon il ne sait pas ce qu'il doit recevoir et donner le résultat que tu as, surtout pour un délai de 150ms

    Par exemple:
    En ASCII, ajoute un terminateur <CR>.
    Si tu restes en transmission binaire, gères ton propre format, en évitant les collisions de données (une donnée égale à une valeur du format.
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  3. #3
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations forums :
    Inscription : Février 2005
    Messages : 242
    Points : 63
    Points
    63
    Par défaut
    Bonjour,

    J'ai trouvé la solution merci

    D'après la doc Arduino la fonction println() envoi un <CR> puis un <LF> après le message envoyé (logique ^^).

    Donc un petit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ComDataPacket1.StopString:=#13+#10;
    et le tour est joué !

    Par contre y a-t-il moyen de récupérer des valeurs directement numériques et non chaînes de caractères avec TComPort ?

    Merci.

  4. #4
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Avec le ComDatapacket non, mais tu peux convertir les données qui arrive en byte avec Ord().

    Sans le ComDatapacket, ça sera plus compliqué. Tu vas devoir refaire toute la gestion de découpage de données. Et de toute façon tu devra faire un conversion Char vers Byte.
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

Discussions similaires

  1. [Débutant] Problème avec utilisation intense des régions graphiques
    Par DomNad dans le forum VB.NET
    Réponses: 1
    Dernier message: 16/05/2014, 14h19
  2. [XL-2003] Problème avec utilisation d'une fonction dans les formules
    Par damsmut dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/05/2009, 10h43
  3. problème avec utilisation de cryptAPI
    Par ironboy007 dans le forum Bibliothèques
    Réponses: 0
    Dernier message: 23/04/2009, 14h25
  4. probléme avec utilisation de deux tables
    Par lila23 dans le forum Bases de données
    Réponses: 3
    Dernier message: 04/02/2009, 13h26
  5. [Compiler] Problème avec utilisation du MCR
    Par Death83 dans le forum MATLAB
    Réponses: 8
    Dernier message: 30/10/2007, 12h59

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