[Rxtx] Lecture et écriture des données envoyées par Rs232
Bonjour :),
je cherche à lire des données envoyées par un microcontrôleur PIC18 et les enregistrer dans un fichier via la librairie Rxtx.
Cependant, je n'arrive pas à le faire, mon fichier reste vide et j'obtiens pas mal d'erreurs :?.
Voici le code que j'ai fais :P:
Code:
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
|
import gnu.io.CommPort;
import gnu.io.CommPortIdentifier;
import gnu.io.NoSuchPortException;
import gnu.io.PortInUseException;
import gnu.io.SerialPort;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
public class COMListener {
//private int rate=9600;
public int etatPort; // 1 port en attente, 2 transmission, sinon pas detecté
private CommPort commPort;
public COMListener() {
super();
}
void connect(String portName) throws Exception {
try{
CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(portName);
if (portIdentifier.isCurrentlyOwned()) {
System.out.println("Erreur: Port déja en cours d'utilisation");
} else {
commPort = portIdentifier.open(this.getClass().getName(),2000);
System.out.println("port détecté ! ");
etatPort=1;
System.out.println("etatport " +getEtatPort());
if (commPort instanceof SerialPort) {
SerialPort serialPort = (SerialPort) commPort;
//serialPort.setSerialPortParams(57600, SerialPort.DATABITS_8,SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8,SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
//serialPort.setSerialPortParams(rate, SerialPort.DATABITS_8,SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
InputStream in = serialPort.getInputStream();
OutputStream out = serialPort.getOutputStream();
(new Thread(new SerialReader(in))).start();
(new Thread(new SerialWriter(out))).start();
System.out.println("Mot ecrit");
} else {
System.out.println("Erreur: Seuls les ports série sont utilisés");
}
}
}catch(NoSuchPortException ex){
System.out.println("Pas de port détecté ! ");
}
catch(PortInUseException e1){
System.out.println("Erreur: Port déja en cours d'utilisation dans un autre programme");
}
}
/** */
public static class SerialReader implements Runnable {
InputStream in;
public SerialReader(InputStream in) {
this.in = in;
}
public void run() {
PrintWriter out = null;
byte[] buffer = new byte[8];
int len = -1;
try {
out = new PrintWriter(new BufferedWriter(new FileWriter(
"fichiers/test.txt",true)));
while ((len = this.in.read(buffer)) > -1) {
String next=new String(buffer,0,len);
System.out.print(next);
out.print(next);
out.flush();
}
// out.newLine(); //saut de ligne
System.out.println(out);
} catch (IOException e) {
if (out != null)
out.close();
e.printStackTrace();
}
}
}
/** */
public static class SerialWriter implements Runnable {
OutputStream out;
public SerialWriter(OutputStream out) {
this.out = out;
}
public void run() {
try {
int c = 0;
while ((c = System.in.read()) > -1) {
this.out.write(c);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public int getEtatPort() {
return etatPort;
}
public void fermerPort(){
commPort.close();
}
} |
:D