Java / Arduino - Lesen von Daten vom seriellen Port

8

Ich habe ein Programm in Java, wo ich die Informationen lesen muss, die ein Arduino sendet. Ich habe den Java-Code von hier genommen. Nun, ich habe nicht wirklich verstanden, wie es funktioniert, aber ich habe versucht, es zu ändern, und ich habe das:

%Vor%

Ich erstelle das Objekt Serial mit dem COM-Port , den ich im Hauptprogramm benötige, dann benutze ich Serial.read und Serial.write , wenn ich es brauche.

Serial.write funktioniert großartig, Arduino holt die Daten und zeigt sie in einem LCD-Display an. Das Problem ist Serial.read . Wenn das Programm läuft, liest es von der seriellen Schnittstelle (etwa alle 40 ms), aber das bedeutet nicht, dass Arduino etwas gesendet hat. Arduino sendet nur ein Byte, wenn eine Schaltfläche gedrückt wird. Also, wenn der Java-Code läuft, wird "n" Exception ausgelöst, bevor etwas gelesen wird, und dies ist mit so viel Verzögerung verbunden.

Ich weiß, ich brauche etwas wie Serial.available() , ich habe versucht input.available() , aber es funktioniert nicht. Ich weiß nicht, wie ich dieses Problem lösen soll.

Wenn Sie einen funktionierenden Code haben, wäre ich Ihnen sehr dankbar, wenn Sie ihn mir geben könnten. Ich brauche nur zwei Methoden, lesen und schreiben, ist mir egal, wie der Code funktioniert: D

BEARBEITEN:

Ich habe die serielle Klasse geändert, jetzt hat es wieder diese Methode wie apremalal sagte

%Vor%

und in der anderen Klasse (Panel in diesem Fall) habe ich das:

%Vor%

Es druckt die Werte korrekt, aber data == "255" ist immer falsch, auch wenn ich wirklich 255 bekomme .... Ich habe versucht, Integer.parseInt zu tun, aber nichts hat sich geändert. Warum zur Hölle?

EDIT 2: Ok gelöst: \

%Vor%

Jetzt ist es Arbeit .. weiß nicht, warum ich das tun musste ... meh was auch immer:)

    
Giammarco Boscaro 14.04.2013, 06:19
quelle

2 Antworten

8

Sie möchten nicht explizit eine Lesefunktion schreiben, die bereits im Beispielcode vorhanden ist. Wie TheMerovingian darauf hingewiesen hat, können Sie den Eingabepuffer vor dem Lesen überprüfen. Hier ist der Arbeitscode, den ich in einem meiner Projekte verwendet habe.

%Vor%

EDIT: serialEvent Funktion ist verantwortlich für das Lesen des Puffers.

%Vor%     
Anuruddha 14.04.2013, 07:08
quelle
0

Die Klasse BufferedReader hat eine ready() Methode, die True zurückgibt, wenn "der Puffer nicht leer ist oder wenn der zugrunde liegende Zeichenstrom bereit ist". und False andernfalls. Sie können also in der Methode read() eine Überprüfung hinzufügen, um sicherzustellen, dass Daten gelesen werden, bevor Sie versuchen, sie zu lesen.

%Vor%

Es sieht so aus, als ob der Code eine try-catch hat, die man behandeln kann, wenn diese Dinge scheitern, was möglicherweise die Verzögerung verursacht, weil try-catch ziemlich teuer sind. Daher sollte der input.ready() Check zu weniger Ausnahmen führen.

    
TheMerovingian 14.04.2013 06:56
quelle

Tags und Links