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

Entrée/Sortie Java Discussion :

Lire les données colléctées par le port


Sujet :

Entrée/Sortie Java

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2009
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 140
    Points : 84
    Points
    84
    Par défaut Lire les données colléctées par le port
    Bonjour,
    Je suis en train de développé une application qui lit les données colléctés par un capteur <moteiv> avec java.
    alors j'ai essaié d'utilisé api javax.comm pour la communication avec le port .
    je veux savoir la methode correct pour le faire .
    je veu savoir la forme des trame envoyé par le capteur
    j'utilise le code suivant :

    //-------------------------------------------------------------------------

    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
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    import java.io.*; 
    import javax.comm.*; 
    import java.util.*; 
     
    public class PortReader implements SerialPortEventListener { 
    static Enumeration ports; 
     
    static CommPortIdentifier pID; 
     
    InputStream inStream; 
     
     
    private BufferedReader fluxLecture; 
     
    SerialPort serPort; 
     
    //vitesse de transmission 
    private int vitesse; 
     
    public PortReader() throws Exception{ 
    serPort = (SerialPort) pID.open("PortReader", 2000); 
    inStream = serPort.getInputStream(); 
    //On ajoute un auditeur qui écoute sur la substance provenant du port série 
    serPort.addEventListener(this); 
     
    serPort.notifyOnDataAvailable(true); 
     
    serPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, 
    SerialPort.PARITY_NONE); 
    } 
     
    public void serialEvent(SerialPortEvent event) { 
    switch (event.getEventType()) { 
    case SerialPortEvent.BI: 
    System.out.println("SerialPortEvent.BI occurred"); 
    case SerialPortEvent.OE: 
    System.out.println("SerialPortEvent.OE occurred"); 
    case SerialPortEvent.FE: 
    System.out.println("SerialPortEvent.FE occurred"); 
    case SerialPortEvent.PE: 
    System.out.println("SerialPortEvent.PE occurred"); 
    case SerialPortEvent.CD: 
    System.out.println("SerialPortEvent.CD occurred"); 
    case SerialPortEvent.CTS: 
    System.out.println("SerialPortEvent.CTS occurred"); 
    case SerialPortEvent.DSR: 
    System.out.println("SerialPortEvent.DSR occurred"); 
    case SerialPortEvent.RI: 
    System.out.println("SerialPortEvent.RI occurred"); 
    case SerialPortEvent.OUTPUT_BUFFER_EMPTY: 
    System.out.println("SerialPortEvent.OUTPUT_BUFFER_EMPTY occurred"); 
    break; 
    case SerialPortEvent.DATA_AVAILABLE: 
    System.out.println("SerialPortEvent.DATA_AVAILABLE occurred"); 
     
    byte[] readBuffer = new byte[20]; 
    String codeBarre = new String(); 
    byte buffer [ ] = new byte [20] ; 
    try { 
    while (inStream.available() > 0) { 
    int k = inStream.read(readBuffer); 
    vitesse=serPort.getBaudRate();//serPort.getBaudRate() 
     
    fluxLecture =new BufferedReader(new InputStreamReader(serPort.getInputStream())); 
     
    DataInputStream data = new DataInputStream (serPort.getInputStream()) ; 
     
     
     
    } 
    // for (int i = 0 ; i != buffer.length ; i++) 
    //System.out.print ( (char) buffer [i]) ; 
    //codeBarre = fluxLecture.readLine(); 
    //System.out.println(" vitesse->"+vitesse); 
    //System.out.println(" read->"+inStream.read(readBuffer)); 
    //System.out.println(" donnees->"+fluxLecture); 
    //System.out.println(" ->"+data ); 
    } catch (IOException ioe) { 
    System.out.println("Exception " + ioe); 
    } 
    break; 
    } 
    } 
     
    public static void main(String[] args) throws Exception{ 
    ports = CommPortIdentifier.getPortIdentifiers(); 
     
    while (ports.hasMoreElements()) { 
    pID = (CommPortIdentifier) ports.nextElement(); 
    //System.out.println("Port " + pID.getName()); 
     
    if (pID.getPortType() == CommPortIdentifier.PORT_SERIAL) { 
    if (pID.getName().equals("COM17")) { 
    PortReader pReader = new PortReader(); 
    System.out.println("COM 17 found"); 
    } 
    } 
    } 
    } 
     
    }

  2. #2
    Membre habitué Avatar de r2d2abc
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 212
    Points : 179
    Points
    179
    Par défaut
    Salut ton code à l'air bon mais regarde ces liens et surtout teste pas à pas.
    http://java.sun.com/developer/releas...impleRead.java
    et là ..
    http://java.sun.com/developer/releas...mpleWrite.java
    sans oublier bien sûr ..
    http://christophej.developpez.com/tu...java/javacomm/

    Sur quelle plateforme tournes tes capteurs ? quel proc ? os ? en général tu as des outils/lib (c/java) fournis avec qui éclaircissent tout.

    hope this helps ...

    rem: utilise la balise code pour plus de clarté

  3. #3
    Membre régulier
    Inscrit en
    Décembre 2009
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 140
    Points : 84
    Points
    84
    Par défaut
    merci r2d2abc pour votre intérêt :
    en fait,j'utilise un capteur moteiv,il est utilisé environnement unix.
    pour moi,je travail sous windows xp,et j'utilise le simulateur unix "cygwin".
    j'utilise api javax.comm dans mon programme.
    j'ai deja essayé d'utiliser Simpleread.java,mais ca marche pas,cas dans se programme on fait un readLine(),ca ne va pas marcher on n'a pas de lignes pour les lires.

    jé utilisé le logiciel Serial Port Monitor,les données recue :
    08 e7 00 c0 00
    08 e1 00 cc 00
    08 81 00 c0 00
    ......
    Alors j'éspere que mon programme en java affiche la meme chose.

  4. #4
    Membre habitué Avatar de r2d2abc
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 212
    Points : 179
    Points
    179
    Par défaut
    ...justement SimpleRead.java contient un mode de lecture "byte à byte" tant qu'il y a quelque chose de présent (inputStream.available()) , la sortie qu'il en fait en String n'est là qu'à titre de trace, à toi de la modifier.

  5. #5
    Membre régulier
    Inscrit en
    Décembre 2009
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 140
    Points : 84
    Points
    84
    Par défaut
    j'ai essayé de la modifier mais toujours j'arrive pas a la resultat correct :
    j'ai fait cela :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      while (inputStream.available() > 0) {
     
                        int numBytes = inputStream.read(readBuffer);
     
      for(byte bit : readBuffer)
                            	System.out.print("" + bit + " ");
     
                                               }
    resultat :
    ------------
    8 20 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    8 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 64 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    8 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 64 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

    alors si vous avez une idée comment le faire??
    cas il faut que j'arrive a lire les données sans les convertir en string.

  6. #6
    Membre régulier
    Inscrit en
    Décembre 2009
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 140
    Points : 84
    Points
    84
    Par défaut
    Y at-il une solution pour que le résultat soit comme le suivant :

    08 e7 00 c0 00
    08 e1 00 cc 00
    08 81 00 c0 00
    ....

  7. #7
    Membre habitué Avatar de r2d2abc
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 212
    Points : 179
    Points
    179
    Par défaut
    Salut, en fait là tu en es à l'étape où il y a acquisition donc c bon. Après il faut potasser la doc sur ton interface.. pour appliquer les handshakes,format
    etc... je viens de faire des tests avec une plateforme sériel qui fonctionne avec un protocole d'échange hard/soft et cela marche bien avec plusieurs vitesses et mes dump focntionnenet bien, donc tu devrais revoir les aspects protocole d'échange, tu es sûr d'être sur 8 bit et pas 7 bits ou 6 avec fenêtre de décalage ....
    voilà

  8. #8
    Membre régulier
    Inscrit en
    Décembre 2009
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 140
    Points : 84
    Points
    84
    Par défaut
    merci r2d2abc une autre fois pour votre intérêt,
    voici la fonctions setSerialPortParams :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        serialPort.setSerialPortParams(9600,
                    SerialPort.DATABITS_8,
                    SerialPort.STOPBITS_1,
                    SerialPort.PARITY_NONE);
    vitesse :9600 nbre bits:8 bits d'arret :1 parity:non
    -------------------------------------------------------------
    j'ai modifié la façon de la lecture pour lire en hexa : Integer.toHexString(bit)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
           while (inputStream.available() > 0) {
     
                       int numBytes = inputStream.read(readBuffer);
     
      for(byte bit : readBuffer)
    //--------------POUR LIRE EN HEXA----------                       
     	System.out.print("" + Integer.toHexString(bit) + " ");
     
                            System.out.println("");
     
                    }
    RESULTAT------------------------

    2 0 78 0 0
    8 2 0 0 0
    0 78 0 0 0
    8 2 0 0 0
    78 0 0 0 0
    8 2 0 0 0
    0 78 0 0 0

    ----------------------------------------------------------
    j'ai changé la vitesse :110

    2 0 78 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    ------STOPBIT------
    fffffff8 ffffff86 ffffff80 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    ------STOPBIT------
    c c 0 0 0 0 0 ffffffe6 ffffff86 66 0 0 0 0 0 0 0 0 0 0
    ------STOPBIT------
    66 3c ffffffe6 66 3f 6 0 0 18 0 0 0 0 0 0 ffffffe6 fffffffe fffffffe fffffff8 ffffff86
    fffffffe 0 ffffffe6 66 3f 6 0 0 18 0 0 0 0 0 0 ffffffe6 fffffffe fffffffe fffffff8 ffffff86
    ------STOPBIT------
    fffffff8 ffffff86 ffffff80 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    c c 0 0 0 0 0 ffffffe6 ffffff86 66 0 0 0 0 0 0 0 0 0 0
    ------STOPBIT------
    66 3c ffffffe6 66 3f 6 0 0 18 0 0 0 0 0 0 ffffffe6 fffffffe fffffffe fffffff8 ffffff86
    fffffffe 0 ffffffe6 66 3f 6 0 0 18 0 0 0 0 0 0 ffffffe6 fffffffe fffffffe fffffff8 ffffff86
    ------STOPBIT------

    $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
    -------------------------------------------------------------------
    Est-ce que cé bon ce que jé fait jusqu'a ce mement???
    si cé bon...est ce que vous avez une idée comment puis-je faire un traitement de cé données??

    _______________________________________________________________
    je suis desolé si je pose bcp de question ,cas vous etes la seul personne qui m'a repondu depuis que jé débuté ce projet (5 semaine)..

  9. #9
    Membre habitué Avatar de r2d2abc
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 212
    Points : 179
    Points
    179
    Par défaut
    désolé pour le retard, je te joins un petit soft que j'ai bricolé, tu peux tester avec ton canal et me donner les résultats s'il te plait ?
    Fichiers attachés Fichiers attachés

  10. #10
    Membre régulier
    Inscrit en
    Décembre 2009
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 140
    Points : 84
    Points
    84
    Par défaut
    je vous remerci r2d2abc, mais ca ne marche plus.
    en fait, votre soft donne la possibilité de choisir entre 4 port COM1,2,3,4
    et mon mini pc à COM15,16,17;jé essayé dans un autre pc COM2 et ca ne marche pas.

    la resultat si j'utilise Serial Port Moniteur :
    08 e1 00 dc 00
    08 e5 00 d8 00
    08 e1 00 dc 00
    08 81 00 dc 00
    08 81 00 dc 00
    08 81 00 dc 00
    08 e1 00 d8 00
    .......

  11. #11
    Membre habitué Avatar de r2d2abc
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 212
    Points : 179
    Points
    179
    Par défaut
    essaie avec celui-ci (j'ai étendu la zone des ports).
    Fichiers attachés Fichiers attachés

  12. #12
    Membre régulier
    Inscrit en
    Décembre 2009
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 140
    Points : 84
    Points
    84
    Par défaut
    désolé, mais ca ne marche plus.
    ->dans mon application java ,il faut collecté les données ,puis les traités ,ensuite affiché cé données en forme numerique +un oscilloscope.

    alors la phase la plus difficile cé la lecture des données et le traitement.

  13. #13
    Membre habitué Avatar de r2d2abc
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 212
    Points : 179
    Points
    179
    Par défaut
    en fait l'outil filé te permet de dumper la ligne et fonctionne avec mon install par contre j'ai trouvé ces liens (entre autres) qui ont l'air de correspondre à ce que tu veux faire et ils utilisent des package de tinyos :

    http://circuit.ucsd.edu/~curts/cours...duction_V4.pdf
    et
    http://www.tinyos.net/tinyos-1.x/doc...l/lesson6.html
    hope this helps...

  14. #14
    Membre habitué Avatar de r2d2abc
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 212
    Points : 179
    Points
    179
    Par défaut
    en fait l'outil filé te permet de dumper la ligne et fonctionne avec mon install par contre j'ai trouvé ces liens (entre autres) qui ont l'air de correspondre à ce que tu veux faire et ils utilisent des package de tinyos :

    http://circuit.ucsd.edu/~curts/cours...duction_V4.pdf
    et
    http://www.tinyos.net/tinyos-1.x/doc...l/lesson6.html
    hope this helps...

  15. #15
    Membre régulier
    Inscrit en
    Décembre 2009
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 140
    Points : 84
    Points
    84
    Par défaut
    ok merci je vais voir....
    si vous pouvez me donner une simple intro de cé document,et de ce qui tourne dans votre tete

  16. #16
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Salut Othman:
    Voici mon résultat de test du tutorial qui se trouve sur le site officiel du TinyOs (Leçon 6)


  17. #17
    Membre habitué Avatar de r2d2abc
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 212
    Points : 179
    Points
    179
    Par défaut
    ok Akrramo je penses que tu y es....

  18. #18
    Membre régulier
    Inscrit en
    Décembre 2009
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 140
    Points : 84
    Points
    84
    Par défaut
    je vois que les données ne change pas.
    si quelqu'un peut m'expliqué pourquoi il y a une difference entre cé 3 resultat :

    1) jé eu presque le meme resultat que akrramo (lecon 6):
    08 00 00 00 00 00 7E 00 65 7D 00 00 02 00 00 00 00 00 08 00 00 00 00

    2) dans mon applications java (baudrate =57600):
    7e 42 8 0 0 0 0 0 7d 5e 0 65 7d 5d 0 0 1 0 0 0 0 0 d 31 7e 7e
    0 42 8 0 0 0 0 0 7d 5e 0 65 7d 5d 0 0 1 0 0 0 0 0 d 31 7e 7e
    ------------
    7e 42 8 0 0 0 0 0 7d 5e 0 65 7d 5d 0 0 1 0 0 0 0 0 d 31 7e 7e
    0 42 8 0 0 0 0 0 7d 5e 0 65 7d 5d 0 0 1 0 0 0 0 0 d 31 7e 7e
    ------------
    7e 42 8 0 0 0 0 0 7d 5e 0 65 7d 5d 0 0 1 0 0 0 0 0 d 31 7e 7e
    0 42 8 0 0 0 0 0 7d 5e 0 65 7d 5d 0 0 1 0 0 0 0 0 d 31 7e 7e

    3)et avecSERIAL PORT MOnitor (avec baudrate =57600):
    7e 42 84 80 80 40 40 a0 79 01 65 7d 57 40 a0 20 20 10 10 08 a8 28 f2 f9 ff 00
    7e 42 84 80 80 40 40 a0 79 01 65 7d 57 40 a0 20 20 10 10 08 a8 28 f2 f9 ff 00
    7e 42 84 80 80 40 40 a0 79 01 65 7d 57 40 a0 20 20 10 10 08 a8 28 f2 f9 ff 00

  19. #19
    Membre habitué Avatar de r2d2abc
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 212
    Points : 179
    Points
    179
    Par défaut
    les paramètres que tu utilises (start/stop/data) ne sont pas les mêmes forcément.... , si le format des données/protocole d'échange est respecté les données doivent être les mêmes sinon j'imagine que tu as une doc claire avec ton kit non ? tu n'as pas une hotline à appeler, et en général tous les kits sont fournis avec des tonnes d'exemples, je crois qu'il faut que tu creuses de ce côte là. En fait que doivent signifier les données reçues au dela des bytes recus ?

  20. #20
    Membre régulier
    Inscrit en
    Décembre 2009
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 140
    Points : 84
    Points
    84
    Par défaut
    bonsoir r2d2abc,
    jé pas compris une chose quand vous m'avez dit que"je n'ai pas une hotline à appeler".??.
    Maintenant,je vais cherché pour savoir comment analysé cé trame,a l'aide de ce que vous m'avez donné .
    restez en contact SVP.

Discussions similaires

  1. [Imprimante] Lire les données qui transitent sur un port paralléle
    Par gastoncs dans le forum Périphériques
    Réponses: 7
    Dernier message: 29/07/2011, 21h15
  2. Lire les données d'un port USB en C
    Par zguingua dans le forum C
    Réponses: 18
    Dernier message: 21/08/2008, 16h21
  3. Lire les données sur un port //
    Par gastoncs dans le forum Périphériques
    Réponses: 1
    Dernier message: 20/08/2008, 22h40
  4. Lire les données du port série RS232
    Par Sytchev3 dans le forum Langage
    Réponses: 2
    Dernier message: 16/06/2008, 08h47
  5. lire les données sur un port RS232
    Par xave dans le forum Langage
    Réponses: 6
    Dernier message: 06/10/2005, 16h40

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