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

Lazarus Pascal Discussion :

Problème utilisation synaser


Sujet :

Lazarus Pascal

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2015
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Problème utilisation synaser
    Bonjour,

    J'aimerais faire communiquer mon Arduino avec une application Lazarus à l'aide du composant "synaser" ou bien "lazserial", peu importe lequel puisque l'un est inspiré de l'autre et fonctionne sur le même principe d'après ce que j'ai compris. Cependant j'ai beaucoup de mal à les utiliser, j'ai beau regarder l'exemple fourni avec, je n'arrive pas à réceptionner les données sur ma carte. J'ai également regardé cette documentation http://synapse.ararat.cz/doc/help/synaser.html mais elle n'indique pas quelles fonctions utiliser.

    Voici mon code actuel:
    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
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
         i:=0;
         ser:=TBlockserial.Create;
         try
           ser.RaiseExcept:=True;
           ser.Connect('COM5');
           ser.Config(9600,8,'N',SB1,false,false);
           ser.SendString(inttostr(i));
           //ser.Recvstring(consigne);
           //writeln (ser.ATCommand('ATI8'));
         finally
           ser.Free;
         end;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     inc(i,1);
     Edit1.text:=inttostr(i);
     ser:=TBlockserial.Create;
     try
     ser.SendString(inttostr(i));
     finally
       ser.Free;
     end;
    end;
    Avant de transmettre des commandes complexes, je me suis fixé comme objectif de transmettre simplement une variable qui s'incrémente au fur et à mesure que j'appuie sur un bouton. En cas de réussite, je devrais voir sur mon Arduino: 0 1 2 3...

    Merci d'avance pour votre aide.

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 856
    Points : 11 290
    Points
    11 290
    Billets dans le blog
    6
    Par défaut
    Je lis dans la documentation qu'il faut ajouter un CRLF aux chaînes (ANSI) à transmettre par SendString : ser.SendString(inttostr(i)+CRLF);Dans le code de ton bouton, tu ne reconfigures pas le TBlockserial.
    Peut-être devrais-tu créer l'objet global ser au Create, le libérer seulement au Destroy de la fiche, et t'en servir directement entre.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2015
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par tourlourou Voir le message
    Je lis dans la documentation qu'il faut ajouter un CRLF aux chaînes (ANSI) à transmettre par SendString : ser.SendString(inttostr(i)+CRLF);Dans le code de ton bouton, tu ne reconfigures pas le TBlockserial.
    Peut-être devrais-tu créer l'objet global ser au Create, le libérer seulement au Destroy de la fiche, et t'en servir directement entre.
    D'accord pour le CRLF, c'est quoi une chaîne ANSI ? Bref, par contre pour le TBlockSerial je l'ai remis dans la procedure du bouton car il refuse la compilation sinon. Peux tu ajouter des précisions par rapport au destroy ? Merci.

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 856
    Points : 11 290
    Points
    11 290
    Billets dans le blog
    6
    Par défaut
    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
    procedure TForm1.FormCreate(Sender: TObject);
    begin
         inherited;
         i:=0;
         ser:=TBlockserial.Create;
         ser.RaiseExcept:=True;
         ser.Connect('COM5');
         ser.Config(9600,8,'N',SB1,false,false);
         ser.SendString( inttostr(i) + CRLF ); // CRLF est défini dans l'une des unités de synaser
    end;
     
    procedure TForm1.Destroy;
    begin
         ser.Free;
         inherited;
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     inc(i,1);
     Edit1.text:=inttostr(i);
     ser.SendString( inttostr(i) + CRLF ); // CRLF est défini dans l'une des unités de synaser 
    end;
    En gros, les caractères sont codés sur 1 octet : 7 bits du code ASCII (jusqu'à 127) ou 8 bits des chaînes ANSI dont les 127 autres possibilités ne représentent pas les mêmes caractères selon le code page utilisé. En UTF-8 ou 16, codage des caractères sur 1 à 2 octets au minimum, tous les caractères étant représentables en étendant le nombre d'octets nécessaires (cad codage de longueur variable intégrant tous les codes pages, en quelque sorte).

    Lazarus utilise des chaînes UTF-8 par défaut, alors que synaser attend des chaînes ANSI => il suffit de faire attention aux conversions si nécessaire.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2015
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Merci pour cette précision, j'ai compilé avec la modif que vous m'avez donné et la compilation fonctionne, cependant lors du 1er appui sur le bouton j'ai un message d'erreur qui apparait: "Le projet "nomduprojet" a levé une exception de class external SIGSEGV". Et il pointe l'erreur au niveau de l'instruction ser.sendstring de la procédure du bouton.

  6. #6
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 856
    Points : 11 290
    Points
    11 290
    Billets dans le blog
    6
    Par défaut
    Cette exception sent l'appel à un objet détruit : vérifie dans le code du click si ser est toujours bien attribué : if Assigned(ser) and (ser is TBlockserial) then ser.SendString(...);Sinon, l'ajout du CRLF n'est pas systématique : je viens de relire, il ne doit être fait que si le récepteur l'attend car le composant ne l'ajoute pas.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2015
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    L'application à l'air de fonctionner cependant rien ne s'affiche sur l'arduino, je dois donc corriger mon autre programme. Il y a une manière de vérifier que l'envoi s'effectue bien ? Merci de ton aide en tout cas.

  8. #8
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    je suis le créateur du composant Tlazserial.

    1 - Sur quelle plateforme es-tu côté PC ? Linux ? Windows ? Mac ?
    2 - Quel est ton code du côté arduino ?


    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2015
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Bonjour,
    Je suis sous Windows 7.
    Mon code arduino:
    Code c++ : 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
     
    String inputString = "";         // a string to hold incoming data
     
    void setup()
    {
      Serial.begin(9600);
      inputString.reserve(200);
    }
    void loop()
    {
        if(Serial.available() > 0)
        {
        Serial.println(inputString);
        inputString = "";
        }
    }
    void serialEvent()
    {
      while (Serial.available() > 0)
      {
        char inChar = (char)Serial.read();
        inputString += inChar;
      }
    }

  10. #10
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    d'après ce que je comprends du code côté arduino celui ci renvoie ce qu'il reçoit (un peu du genre mode echo). Il faudrait que du côté PC tu affiches ce que tu reçois sur la ligne série. Regarde un peu comment fonctionne mon exemple avec TLazserial : il est capable d'envoyer des données sur une ligne série et de visualiser ce qui est reçu.

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  11. #11
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2015
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Peut tu m'envoyer l'exemple en question ?

  12. #12
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    Il est inclus avec le paquetage qui se trouve ici

    Il faut être enregistrer dans le forum forum.lazarus.freepascal.org pour pouvoir voir et télécharger l'archive.
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

Discussions similaires

  1. Problème utilisation DLL
    Par Tub-95 dans le forum MFC
    Réponses: 4
    Dernier message: 02/11/2005, 12h00
  2. [Tomcat][Spring] Problème utilisation mémoire
    Par Wutintin dans le forum Hibernate
    Réponses: 12
    Dernier message: 08/09/2005, 14h57
  3. [JSTL] [EL] Problème utilisation <c:out>
    Par XavierL dans le forum Taglibs
    Réponses: 7
    Dernier message: 14/08/2005, 20h12
  4. (Problème) Utilisation de l'API mySQL [Delphi 2005 Perso]
    Par will-scs dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/08/2005, 18h26
  5. [JAR]Problème utilisation manifest et jar
    Par doudine dans le forum Eclipse Java
    Réponses: 6
    Dernier message: 07/01/2005, 10h21

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