2017-09-13 15 views
1

J'essaie de lire des données arduino uno en utilisant un programme Java à l'aide de la bibliothèque rxtx. J'utilise le port de communication série COM8 pour cela. J'utilise win10. Mon problème: quand j'utilise 'serial.print', alors la fonction Java fonctionne bien et récupère tout ce que l'Arduino envoie. Mais quand j'essaie d'utiliser 'serial.write' dans arduino alors une ioexception se produit "java.io.IOException: Flux d'entrée sous-jacente retourné zéro octets" Je ne sais pas pourquoi. mon besoin est d'utiliser la méthode 'serial.write', s'il vous plaît dites-moi ce qui ne va pas dans le code. les deux codes est en baissejava.io.IOException: flux d'entrée sous-jacente retourné zéro octets

Java Code de fonction:

public synchronized void serialEvent(SerialPortEvent oEvent) { 
     if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) { 
      try { 
       String inputLine=input.readLine(); 
       System.out.println(inputLine); 
      } catch (Exception e) { 
       System.err.println(e.toString()); 
      } 
     } 
     // Ignore all the other eventTypes, but you should consider the other ones. 
    } 

arduino Code uno:

#include <SoftwareSerial.h> 

SoftwareSerial mySerial(9, 10); 
void setup() { 
    mySerial.begin(9600); // Setting the baud rate of Software Serial Library 
    Serial.begin(9600); //Setting the baud rate of Serial Monitor 
} 
void loop() { 
    if(mySerial.available() > 0) { 
     Serial.print(mySerial.read()); 
    } 
} 

Répondre

0

j'utilisais serial.println qui casse la ligne à la fin, alors que serial.write ne fonctionne pas. De l'autre côté de la méthode readLine() de java lit toute la ligne, jusqu'à ce qu'il recorgnizes un saut de ligne (\ n)

problème. en cas de serial.write(), il n'y a pas de rupture de ligne « \ n », donc readLine() est incapable de trouver une ligne du tout et donne java.io.IOException: Underlying input stream returned zero bytes au moment où un saut de ligne est requis pour que readLine() fonctionne.

solution : tout en utilisant serial.write() fournir manuellement instruction de saut de ligne ("\ n")