Estoy tratando de comunicarme entre mi PC (Windows 7 usando Netbeans y RXTX) con un Arduino Pro, usando el puerto serie. Arduino está conectado a la PC con un cable FTDI.Comunicación serial entre Java RXTX y Arduino
El código está basado en Java SimpleRead.Java encontró here.
Actualmente el Arduino simplemente imprime una cadena cuando se inicia. Mi programa Java debe imprimir el número de bytes que se han leído y luego imprimir los contenidos. El programa Java funciona, más o menos ...
Si la cadena es larga (> 10 bytes o menos) la salida se romperá.
lo tanto, si en el Arduino imprimo
Serial.println("123456789123456789"); //20 bytes including '\r' and '\n'
La salida de mi programa Java puede ser algo como:
Number of Bytes: 15
1234567891234
Number of Bytes: 5
56789
o
Number of Bytes: 12
1234567891
Number of Bytes: 8
23456789
estoy pensando que es una problema de tiempo, porque cuando paso manualmente el código usando el depurador, la cadena de resultados es siempre lo que debería ser: e cadena de 20 bytes.
He estado jugando con varias cosas, pero no he podido solucionar el problema.
Aquí es la parte del código que me está dando problemas:
static int baudrate = 9600,
dataBits = SerialPort.DATABITS_8,
stopBits = SerialPort.STOPBITS_1,
parity = SerialPort.PARITY_NONE;
byte[] readBuffer = new byte[128];
...
...
public void serialEvent(SerialPortEvent event)
{
if (event.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
try {
if (input.available() > 0) {
//Read the InputStream and return the number of bytes read
numBytes = input.read(readBuffer);
String result = new String(readBuffer,0,numBytes);
System.out.println("Number of Bytes: " + numBytes);
System.out.println(result);
}
} catch (IOException e) {
System.out.println("Data Available Exception");
}
}
Por alguna razón, supuse que los datos se enviarían de forma contigua en una sola secuencia.En el extremo de la PC, solo necesito ver la salida serial, así que no creo que me moleste en tratar de almacenar la línea entrante completa y luego mostrarla. Creo que solo mostraré los datos byte por byte a medida que entran. Así que usaré aByte = input.read(); en lugar de input.read (readBuffer); Gracias – SharpBarb
@SharpBarb - no hay necesidad de cambiar a leer un byte a la vez. Si realmente quieres hacerlo, te recomiendo leer un búfer y luego dentro de tu aplicación solo procesa cada byte por separado. –