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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2009
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 140
    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 confirmé 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
    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 confirmé
    Inscrit en
    Décembre 2009
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 140
    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 confirmé 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
    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 confirmé
    Inscrit en
    Décembre 2009
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 140
    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 confirmé
    Inscrit en
    Décembre 2009
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 140
    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
    ....

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