Arduino de la difficulté avec un numéro de Série.readbytes() lors de la lecture à partir d'un programme Java sur USB

Je suis en utilisant un Arduino Uno. Je suis en train de vivre le comportement bizarre avec Serial.readbytes(). L'Arduino est alimenté et de la communication via USB sur COM4. Je suis en cours d'exécution Eclipse sur une version 64 bits de Windows7.

Mon code Arduino ressemble à celui-ci; les délais sont donc je peut démarrer et arrêter mon service Java et de regarder le numéro de série de la fenêtre dans l'IDE Arduino, inputBuffer est un tableau de caractères.

char inputBuffer[10];   //For incoming serial data
void setup() {
    Serial.begin(9600); //Opens serial port, sets data rate to 9600 bit/s.
}

void GetTemp(){
    int temp = 123;
    Serial.print(temp);
}

void loop() {
    if (Serial.available() > 0) {
        Serial.readBytes(inputBuffer, Serial.available());
        delay(5000);
        Serial.print("I got this ->");
        Serial.print(inputBuffer);
        Serial.println("<-");
    }
    delay(5000);
    Serial.println("delay");
    Serial.println(inputBuffer[0], DEC);
}

Voici le code de mon Java côté. Je l'ai modifié à partir de Deux façon de communcation avec le port série. Cela envoie juste un tableau d'octets sur démarrer.

import gnu.io.CommPort;
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
import java.io.IOException;
import java.io.OutputStream;
public class TwoWaySerialComm
{
public TwoWaySerialComm()
{
super();
}
void connect ( String portName ) throws Exception
{
CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(portName);
if ( portIdentifier.isCurrentlyOwned() )
{
System.out.println("Error: Port is currently in use");
}
else
{
CommPort commPort = portIdentifier.open(this.getClass().getName(),2000);
if ( commPort instanceof SerialPort )
{
SerialPort serialPort = (SerialPort) commPort;
serialPort.setSerialPortParams(9600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
OutputStream out = serialPort.getOutputStream();
(new Thread(new SerialWriter(out))).start();
}
else
{
System.out.println("Error: Only serial ports are handled by this example.");
}
}
}
public static class SerialWriter implements Runnable
{
OutputStream out1;
public SerialWriter ( OutputStream out )
{
this.out1 = out;
}
public void run ()
{
try
{
byte[] test = ("H567").getBytes();//testing string to send
this.out1.write(test);
}
catch ( IOException e )
{
e.printStackTrace();
}
}
}
public static void main ( String[] args )
{
try
{
(new TwoWaySerialComm()).connect("COM4");
}
catch ( Exception e )
{
//TODO Auto-generated catch block
e.printStackTrace();
}
}
}

Quand je le lance, mon Arduino se contente d'afficher une ligne vide. Si je prépare l'Arduino avec "hiya" à l'aide de la Série de la fenêtre, puis, quand le java est exécuté, il sera de retour pour une ligne vide.

Depuis le char tableau est un peu plus écrit chaque fois que j'ai envoyé "H567\r\n", puis dans la Série de la fenêtre tapé envoyé "hiya" où le supplément de retour à la ligne est toujours en cours d'exécution, donc je sais que les caractères sont stockés en quelque sorte.

Un autre essai a été de modifier la dernière Serial.prinln() à Serial.println(inputBuffer[0], DEC). À l'aide de la Série de la Fenêtre, les résultats sont comme prévu, mais à partir de Java, il se contente d'afficher "0". La communication série d'œuvres merveilleuses venant de l'Arduino parler pour le code Java, mais pas à partir du code Java à l'Arduino. Comment puis-je résoudre ce problème?

Par suggestion, j'ai essayé de lecture Serial.available() au lieu d'un fixe avec un maximum de 10. Aucun changement n'a été expérimenté.

La version de RXTX utilisez-vous? La version de Java que vous utilisez?
Vous pouvez poster toutes vos code Java? De préférence, enveloppé agréable et soigné, dans un SSCCE.
Vous devez me pardonner, mais je vais avoir des ennuis avec la SSCCE, je ne suis pas en cours d'exécution sur beaucoup de sommeil maintenant.
RXTX est je crois 2.1-7, j'ai trouvé le 64 bits dll
Jre7, je vais changer le code maintenant,

OriginalL'auteur Mark | 2013-04-08