Communication série entre Java RXTX et Arduino
Je suis en train de communiquer entre mon PC (Windows 7 à l'aide de Netbeans et RXTX) avec un Arduino Pro, en utilisant le port série. L'Arduino est en fait connecté à l'ordinateur à l'aide d'un câble FTDI.
Le code est basé sur le Java SimpleRead.Java trouvé ici.
Actuellement l'Arduino simplement imprime une chaîne de caractères lorsqu'il démarre. Mon programme Java doit imprimer le nombre d'octets qui ont été lus et ensuite imprimer le contenu. Le programme Java fonctionne, en quelque sorte...
Si la chaîne est longue (>10 octets), la sortie se casser.
Donc, si sur l'Arduino, j'ai l'impression
Serial.println("123456789123456789"); //20 bytes including '\r' and '\n'
La sortie de mon programme Java peut ressembler à quelque chose comme:
Number of Bytes: 15
1234567891234
Number of Bytes: 5
56789
ou
Number of Bytes: 12
1234567891
Number of Bytes: 8
23456789
Je pense que c'est un problème de synchronisation, parce que quand je aller manuellement dans le code en utilisant le débogueur, la chaîne de résultat est toujours ce qu'elle devrait être: un 20 chaîne d'octets.
Je me suis amusé avec diverses choses, mais je n'ai pas été en mesure de résoudre le problème.
Voici la partie du code qui me donne des problèmes:
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");
}
}
source d'informationauteur SharpBarb
Vous devez vous connecter pour publier un commentaire.
De données série est juste un flux de données. Selon le moment où vous la lire et de la mise en mémoire tampon qui se passe, seule une partie des données peut être disponible quand vous la lisez.
Depuis que vous êtes à l'aide de la ligne de données orientée, ce que vous voulez faire est de la mémoire tampon les données jusqu'à ce que vous voyez le terminateur de ligne et ensuite seulement de traiter les données.
Je n'ai pas utilisé de Java RXTX, mais j'ai joué avec Arduino et le Traitement et il est assez facile de lire/écrire les valeurs de l'Arduino.
Voici une lecture de l'échantillon qui vient avec le Traitement(Fichier > > Bibliothèques > Série > SimpleRead)
Aussi loin que je me souvienne, la vitesse de transmission truc que vous avez configuré dans Arduino lorsque vous instanciez la Série est assez important. Si vous utilisez 9600 pour envoyer par exemple, vous devez utiliser le même numéro à écouter.
Aussi c'est assez important d'envoyer vos informations OCTETsinon, vous avez des trucs comme \r ou \n dans le chemin.
Version plus courte, essayez:
Le plus simple sera le mieux.
Je pense que vous avez besoin pour utiliser l'événement de la conception dirigée par les modèles pour résoudre ce problème. Je vous recommande fortement de visiter: http://www.whatisarduino.org/bin/Tutorials/Java+Série+API+et+Arduino