Port série - rs232 - javax.com [Résolu]

Messages postés
56
Date d'inscription
samedi 4 novembre 2000
Dernière intervention
5 septembre 2005
- - Dernière réponse : tarchegue
Messages postés
3
Date d'inscription
lundi 25 novembre 2002
Dernière intervention
12 février 2010
- 8 avril 2009 à 09:53
Salut.
Je dois lire des codes barres via des lecteurs RS232 reliés au port série.
J'ai récupéré le javax.com avec ses exemples. Je les ai essayé, notamment le SimpleRead.
Quand il n'y a pas de code barre passé, rien ne se passe ; normal !
Par contre, dès que j'en passe un, il boucle et m'affiche en continu Â.....(les points sont des carrés transparents)
Apparemment, le  correspond à 197 en code ASCII ; ce qui correspond à une demande de données.
Mais je voudrais bien récupérer les chiffres du code barre.

J'ai regardé un peu partout sur le forum et sur le net mais c'est toujours pareil.
Sinon, j'ai testé le code de http://christophej.developpez.com/tutoriel/java/javacomm/
J'ai le même problème. Il est censé afficher le code barre. Mais ça bloque dès qu'il y a une opération (style readLine) sur le BufferedReader.

Si quelqu'un pouvait m'aider... Merci !!!
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
Messages postés
2
Date d'inscription
mercredi 8 juin 2005
Dernière intervention
8 juin 2005
3
Merci
Est-ce que cela fonctionne avec un autre programme ( non Java) ?

Cela ressemble a un probleme de configuration du port ( Nbre de bit, bit de stop, vitesse)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de cs_chevalir
Messages postés
56
Date d'inscription
samedi 4 novembre 2000
Dernière intervention
5 septembre 2005
3
Merci
Tout va bien avec un prog Windev. Mais finalement, j'ai réussi à gérer le truc avec JAVA, il fallait que je fasse un write(197) sur un outputStream pour lui dire d'envoyer les données.. J'ai eu dû mal à comprendre. Et je suis pas sûr d'avoir tout compris.
(J'envoie aucun ACK mais le buffer se vide quand même). Mais bon, c'est pas grave, le tout, c'est que je recupère mes codes barres.

Merci quand même pour ton aide.
Bye !

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de kourdou59
Messages postés
3
Date d'inscription
lundi 25 novembre 2002
Dernière intervention
12 février 2010
0
Merci
/**
*
* @author Yassine Ettarchegue
* j'espere que cet exemple vous aidera veiller * nous envoyer des reclamation dans le deux cas
*/
import javax.comm.*;
import com.sun.comm.Win32Driver;
import java.io.*;
import java.util.*;

public class ModeEvenement extends Thread implements SerialPortEventListener {

private CommPortIdentifier portId;
private SerialPort serialPort;
private BufferedReader fluxLecture;
private boolean running;
public javax.swing.JTextField sort;

/**
* Constructeur qui récupère l'identifiant du port et lance l'ouverture.
*/
public ModeEvenement(String port) {
//initialisation du driver
Win32Driver w32Driver = new Win32Driver();
w32Driver.initialize();
sort=new javax.swing.JTextField();
//récupération de l'identifiant du port
try {
portId = CommPortIdentifier.getPortIdentifier(port);
} catch (NoSuchPortException e) {
}
//ouverture du port
try {
serialPort = (SerialPort) portId.open("ModeEvenement", 2000);
} catch (PortInUseException e) {
}
//récupération du flux
try {
fluxLecture =
new BufferedReader(
new InputStreamReader(serialPort.getInputStream()));
} catch (IOException e) {
e.printStackTrace();
}
//ajout du listener
try {
serialPort.addEventListener(this);
} catch (TooManyListenersException e) {
e.printStackTrace();
}
//paramétrage du port
serialPort.notifyOnDataAvailable(true);
try {
serialPort.setSerialPortParams(
9600,
SerialPort.DATABITS_7,
SerialPort.STOPBITS_1,
SerialPort.PARITY_EVEN);
} catch (UnsupportedCommOperationException e) {
}
System.out.println("port ouvert, attente de lecture");
}

public void run() {
running = true;
while (running) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
}
}
//fermeture du flux et port
try {
fluxLecture.close();
} catch (IOException e) {
}
serialPort.close();
}

/**
* Méthode de gestion des événements.
*/
public void serialEvent(SerialPortEvent event) {
//gestion des événements sur le port :
//on ne fait rien sauf quand les données sont disponibles
switch (event.getEventType()) {
case SerialPortEvent.BI:
case SerialPortEvent.OE:
case SerialPortEvent.FE:
case SerialPortEvent.PE:
case SerialPortEvent.CD:
case SerialPortEvent.CTS:
case SerialPortEvent.DSR:
case SerialPortEvent.RI:
case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
break;
case SerialPortEvent.DATA_AVAILABLE:
String codeBarre = new String();
try {
//lecture du buffer et affichage
codeBarre = (String) fluxLecture.readLine();
sort.setText(codeBarre);
System.out.println(codeBarre);
} catch (IOException e) {
}
break;
}
}

/**
* Permet l'arrêt du thread
*/
public void stopThread() {
running = false;
}

/**
* Méthode principale de l'exemple.
*/
public static void main(String[] args) {
//Récuperation du port en argument
String port = "COM1";
//lancement de l'appli
ModeEvenement modeEve = new ModeEvenement(port);
modeEve.start();
//"interface utilisateur"
System.out.println("taper q pour quitter");
//construction flux lecture
BufferedReader clavier =
new BufferedReader(new InputStreamReader(System.in));
//lecture sur le flux entrée.
try {
String lu = clavier.readLine();
while (!lu.equals("q")) {
}
} catch (IOException e) {
}
modeEve.stopThread();
}
}
Commenter la réponse de tarchegue

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.