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 :

ecriture sur port série


Sujet :

Entrée/Sortie Java

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 7
    Par défaut ecriture sur port série
    bonjour,
    voila je suis en train de faire un programme qui gére la connexion d'un pc et d'un GPS sur un port série. j'ai pu etablir la connexion et recevoir les données puis les enregistrer dans un fichier text, ce qui me manque c'est d'envoyer des commandes(chaines de caractères) vers le GPS, la methode utilisée dans mon programme ne fait pas l'affaire


    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
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    /*
     * test2.java
     */
     
    package javaapplication11;
     
     
     
    import javax.comm.*;
    import com.sun.comm.Win32Driver;
    import java.io.*; 
    import java.util.*;
     
    import java.io.FileDescriptor;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
     
    public class test2
    {
        public test2()
        {
            super();
            Win32Driver w32Driver = new Win32Driver();
    		w32Driver.initialize();
     
        }
     
        void connect ( String portName ) throws Exception
        {
            CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(portName);
     
            if ( portIdentifier.isCurrentlyOwned() )
            {
                System.out.println("Erreur : port série indisponible");
            }
            else
            {
                CommPort commPort = portIdentifier.open(this.getClass().getName(),2000);
     
                if ( commPort instanceof SerialPort )
                {
                    SerialPort serialPort = (SerialPort) commPort;
                    serialPort.setSerialPortParams(57600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
     
                    InputStream in = serialPort.getInputStream();
                    OutputStream out = serialPort.getOutputStream();
     
     
                    (new Thread(new SerialWriter(out))).start();
                    (new Thread(new SerialReader(in))).start();
     
     
                }
                else
                {
                    System.out.println("Erreur");
                }
            }     
        }
     
     
        public static class SerialReader implements Runnable 
        {
            InputStream in;
     
            public SerialReader ( InputStream in )
            {
                this.in = in;
            }
     
            public void run ()
            {
                byte[] buffer = new byte[1024];
                int len = -1;
                try
                {
                    while ( ( len = this.in.read(buffer)) > -1 )
                    {
                        System.out.print(new String(buffer,0,len));
                        ObjectOutputStream SerialReader = new ObjectOutputStream(new FileOutputStream(("fichier.txt"),true));  
                         SerialReader.writeObject(new String(buffer,0,len));
                    }
     
     
                }
                catch ( IOException e )
                {
                    e.printStackTrace();
                }            
            }
        }
     
        public static class SerialWriter implements Runnable 
        {
            OutputStream out;
     
            public SerialWriter ( OutputStream out )
            {
                this.out = out;
            }
     
            public void run ()
            {
                try
                { 
     
                  int c ;
                    while ( (  c = System.in.read()) > -1 )
                    {
                        this.out.write(c);
                        System.out.println("message envoyé");
     
                    } 
     
                }
                catch ( IOException e )
                {
                    e.printStackTrace();
                }            
            }
        }
     
     
     
        public static void main ( String[] args )
        {
            try
            {
                (new test2()).connect("COM5");
            }
            catch ( Exception e )
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        }

    merci pour votre aide.

  2. #2
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 7
    Par défaut
    pour plus de précisions :
    la connexion avec le GPS est geré, il me retourne des informations, mon seul probleme c'est dans la methode SerialWriter qui ne fait que d'envoyer des bits, et moi j'aurais besoin d'envoyer une chaine de caractère en ASCII.

    j'espère que le problème est maintenant plus clair.

  3. #3
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Je ne comprends pas trop ton souci dsl Pourquoi tu n'envoies pas ta chaîne bit à bit ?

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 7
    Par défaut
    je ne peux pas envoyer ma chaine bit/bit parce que le GPS ne la reconnait pas .

  5. #5
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Et pourquoi ne pas utiliser le write(byte[]) ?

  6. #6
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 7
    Par défaut
    j'ai deja essayé mais ça marchait pas.

  7. #7
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 7
    Par défaut
    voila comment j'ai fais pour le write(byte[]), et ça marche pas, peut etre que j'ai oublié ou mal fait quelques choses?!

    code :

    public static class SerialWriter implements Runnable
    {
    OutputStream out;

    public SerialWriter ( OutputStream out )
    {
    this.out = out;
    }

    public void run ()
    {

    try
    {
    String c ="";
    while ( (c.length()==0) || (c.indexOf("OK") == -1) )

    this.out.write(byte[] c);

    System.out.println("message envoyé");
    }
    catch ( IOException e )
    {
    e.printStackTrace();
    }

    }
    }

  8. #8
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 2
    Par défaut
    Tu as oublié de convertir ta chaine en tableau de bytes.
    crée ton tableau de cette manière

    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
     
    public void envoyer(String chaine){
     
              // Création du tableau de byte
     
              byte[] tab = new byte[chaine.length);
     
              // initialisation du tableau
     
              tab = chaine.getbytes();
     
               // ecriture sur le port
     
               this.out.write(tab);
    }
    on suppose bien évidemment le reste de ta classe comme tu l'a décrite plus haut

  9. #9
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 7
    Par défaut
    j'ai résolu le probleme on ajoutant simplement ' \r\n' à la fin de ma chaine de caractère, et maintenant ça marche.

    mais il me reste un tout petit problème, je ne peux pas lire le fichier ou je stocke les données avant d'arreter le programme entièrement.

    si quelqu'un à des suggestions je suis preneur.

    et un big merci à Apollonius et chtiq .

  10. #10
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    je ne peux pas lire le fichier ou je stocke les données avant d'arreter le programme entièrement
    Tu veux dire quoi exactement par là ? Le fichier est vide tant que le programme n'est pas fini ?
    Si c'est cela, mets des flush() après chaque écriture dans le fichier ...

  11. #11
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 7
    Par défaut
    oui exactement j'arrivais pas à lire le fichier tant que le prog. tounait, mais j'ai résolu le problème en fermant le fichier chaque fois qu'on ecrit dedans, pas besoin des flush().

  12. #12
    Membre Expert
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Par défaut
    Bonjour

    Citation Envoyé par badmec10
    je ne peux pas lire le fichier ou je stocke les données avant d'arreter le programme entièrement.
    Probablement tu as ouvert ton fichier en écriture exclusive. Donc il n'est pas possible de lire le fichier tant que l'opération écriture est active.

    La solution est de fermer ton fichier avant de l'ouvrir à nouveau pour le lire, l'ouvrier en mode partagé ou ouvrir un "pipe" entre ton thread de lecture du port sériel et un thread de traitement.

Discussions similaires

  1. [JNI] Lecture/Ecriture sur port série RS232
    Par jabesq dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 20/09/2010, 17h01
  2. Ecriture sur port série
    Par jackk dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 09/03/2009, 16h03
  3. Recevoir "NULL" sur port série
    Par WinY57 dans le forum VB 6 et antérieur
    Réponses: 18
    Dernier message: 04/03/2005, 11h37
  4. Etat de CTS sur port série
    Par Juste_Une_IlluZion dans le forum C++Builder
    Réponses: 9
    Dernier message: 12/09/2004, 10h46
  5. [Débutant] Réception sur port série
    Par Tophe59 dans le forum Langage
    Réponses: 43
    Dernier message: 28/06/2004, 11h04

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