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

Embarqué Discussion :

lecture des données sur le port USB en C


Sujet :

Embarqué

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 16
    Par défaut lecture des données sur le port USB en C
    Bonjour,
    Je développe en c un programme pour dialoguer avec un variateur. Je travaille sous linux.
    voilà mon programme:

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <QtGui>
    #include <unistd.h>
    #include <fcntl.h>
    
    #define VOIE_NUMBER 5
    
    
    int main()
    {
    
    int fd;
    int i=0;
    char buff[20];
    
    
    fd= open("/dev/ttyUSB0", O_WRONLY | O_NDELAY);
    if (fd== -1)
    printf("Une erreur est survenue lors de la connexion avec le port serie 1.Les informations ne lui seront donc pas transmises.");
    else
    
    write(fd, "VLIM\r\n",5);
    
    
    while(read(fd,&buff[i],4)==1);
    
    {
    i++;
    }
    buff[i]='\0';
    
    write(4,buff, strlen(buff));
    printf("VLIM :%d", *buff);
    
    
    
    return 0;
    
    }
    
    normalement il doit afficher 160, mais malheureusement affiche 0.
    avec cette ligne write(fd, "VLIM\r\n",5); j'ai bien vérifié qu'il envoie 160.
    le problème ce trouve dans ces ligne
    
    while(read(fd,&buff[i],4)==1);
    
    {
    i++;
    }
    buff[i]='\0';
    
    write(4,buff, strlen(buff));
    printf("VLIM :%d", *buff);
    Est ce qu'il y a quelqu'un peut m'aider??

  2. #2
    Membre Expert

    Homme Profil pro
    .
    Inscrit en
    Janvier 2006
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Janvier 2006
    Messages : 703
    Par défaut
    Pourrais-tu utiliser la balise code pour présenter ton code stp ?

  3. #3
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Pourquoi mettre #include <QtGui> alors tu travailles en C ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while(read(fd,&buff[i],4)==1);
    {
    i++;
    }
    Pourquoi un ; après le while ?

    En l'enlevant, je pense que tu lis 4 char et les écris dans le buffer ;te décale d'un cran ; tu lis puis écris à nouveau 4 char et en écrasant 3 au passage ; ainsi de suite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    write(4,buff, strlen(buff));
    4 ?

    A quoi te sert cette instruction ?

  4. #4
    Membre Expert

    Homme Profil pro
    .
    Inscrit en
    Janvier 2006
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Janvier 2006
    Messages : 703
    Par défaut
    Je parlais de la balise code, pas quote. J'ai édité ton message en conséquence.
    Il faut que tu fasses ça à l'avenir.

    En remplaçant les 0 ici par des O. Sinon comme dans le MP que je t'ai envoyé, l'exemple est également formaté.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 16
    Par défaut
    merci d'abord pour ta réponse,

    oui j'ai modifié 4 par 1

    voilà mon nouveau programme

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <fcntl.h>
    #include <QtGui>
    #include <errno.h>
    
    
    
    
    
    int main()
    {
    
    int  fd;
    int  i=0;
    char buffer[20];
    
    
    fd= open("/dev/ttyUSB0", O_WRONLY | O_NDELAY);
        if (fd== -1)
                     printf("Une erreur est survenue lors de la connexion avec le port serie 1.Les informations ne lui seront donc pas transmises.");
        else
    
        write(fd, "VLIM\r\n",5);
    
      while(read(fd, &buffer[i],1)==1)
        {
            i++;
        }
    
    
           buffer[i]='\0';
    
            write(1,buffer, strlen(buffer));
            printf("VLIM :%d", *buffer);
    
    return 0;
    
    }
    mais, c'est que la fonction

    retourne toujours la valeur -1, je ne comprends pas c'est quoi le problème. sachant que la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    write(fd, "VLIM\r\n",5);
    demande VLIM qui est 160. je surveille bien le port par un logiciel et je voie que la fonction retourne 160.
    le souci je n'arrive pas à récupérer cette valeur.

    j'ai voulu utiliser errno pour définir l'erreur, mais malheureusement j'ai pas réussi à l'utiliser.

  6. #6
    Membre expérimenté Avatar de Livegen
    Homme Profil pro
    Ingénieur logiciel embarqué Franco-allemand
    Inscrit en
    Avril 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Ingénieur logiciel embarqué Franco-allemand
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 83
    Par défaut
    J'aimerais que quelqu'un de plus expérimenté confirme.

    Mais je pense que le faite que read te retourne -1 est tout à fait normal.

    Tu ouvre ta liaison avec l'option O_WRONLY, qui signifie écriture seulement.

    Essaie de la remplacer par O_RDWR, pour pouvoir lire et écrire sur la liaison.

    Meilleures salutations, Livegen.

Discussions similaires

  1. Problème de lecture de données sur le port USB
    Par lujacquet1 dans le forum C
    Réponses: 3
    Dernier message: 08/06/2015, 15h56
  2. Réponses: 7
    Dernier message: 18/07/2011, 17h34
  3. Envoyer des données sur le port série
    Par jbidou88 dans le forum Flash
    Réponses: 3
    Dernier message: 18/09/2006, 11h33
  4. [javax.comm] Envoyer des données sur le Port série
    Par deuspi dans le forum Applets
    Réponses: 2
    Dernier message: 29/08/2006, 09h40
  5. Récupérer des données via le port usb
    Par matmuth dans le forum C++Builder
    Réponses: 12
    Dernier message: 11/05/2005, 16h34

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