Forum: PC-Programmierung kein Datenempfang mit Windows (Java RXTX)


von Hendrik L. (split)


Lesenswert?

Hi, ich hab hier einen Arduino micro, und hab eine Kommunikation laut 
Beispiel http://playground.arduino.cc/Interfacing/Java eingerichtet, 
jetzt kann ich zwar werte mit dem Hyperterminal empfangen aber nicht mit 
meinem Programm. Senden geht. Das selbe Programm unter Linux 
funktioniert auch in beiden Richtungen. Wo liegt mein fehler??

: Verschoben durch User
von Lisa (Gast)


Lesenswert?

Hi

Könntest du das nochmal genauer erklären. Du meinst, wenn das 
Beispielprogramm auf dem Arduino ist, dann empfängst du was, aber wenn 
dein selber geschribenes Programm drauf ist nicht?

Vielleicht noch einmal ganz ausführlich und klar hinschreiben;)

Noch als Programmtipp: Ich benutze immer hTerm:
http://www.der-hammer.info/terminal/

Finde ich sehr gut. Aber das musst du entscheiden. Siehs dir mal an;)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

So wie ich das verstehe, wird auf dem PC entweder ein Terminalprogramm 
verwendet, das Daten empfangen kann, oder ein selbstgebautes 
Java-Programm, das nur dann Daten empfangen kann, wenn es unter Linux 
läuft, aber nicht unter Windows.

Der Fehler wird dann wohl in der Ansteuerung der seriellen Schnittstelle 
auf dem PC liegen, nicht auf dem Arduino (was weiß der davon, was am 
anderen Ende des Seriellen Kabels lauert? Eben: Nichts).

von Hendrik L. (split)


Lesenswert?

Also, auf dem Arduino läuft ein einfaches Programm, das sende jede 
sekunde eine zahl, und schaltet bei befehl "ein" einen ausgang. Ich habe 
das Java Programm aus dem Arduino Playground genommen und erst mal 
geschaut ob ich was lesen kann, unter Linux geht es, unter Windows 
nicht, daraufhin hab ich den Hyperterminal gestartet und mit den selben 
einstellungen "COM2" 9600 8N1 die werte vom Arduino bekommen. Daraufhin 
hab ich das Java Programm unter Linux so geändert das ich den Ausgan mit 
dem Befehl an/und ausschalten kann. dasselbe dann in Windows gestartet, 
daraufhin konnte ich den Ausgan schalten, aber keine Werte empfangen.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Bitte mal konkrete Beispiele. Der Beispielcode nutzt z.B. gebufferte 
Streams, eventuell hängt da unter Windows was im Buffer. Auch müssen 
alle Zeilen per \r\n abgeschlossen sein.

von Hendrik L. (split)


Lesenswert?

Es wird ja unter Windows noch nicht einmal der SerialPortEventListener 
aufgerufen.
1
try {
2
        serialPort.addEventListener(new serialPortEventListener());
3
      } catch (TooManyListenersException e) {
4
        out.e("TooManyListenersException für Serialport");
5
      }
6
      serialPort.notifyOnDataAvailable(true);

...
1
class serialPortEventListener implements SerialPortEventListener {
2
      public void serialEvent(SerialPortEvent event) {
3
        out.d("serialPortEventlistener");
4
        switch (event.getEventType()) {
5
        case SerialPortEvent.DATA_AVAILABLE:
6
          serialPortDatenVerfuegbar();
7
          break;
8
        case SerialPortEvent.BI:
9
        case SerialPortEvent.CD:
10
        case SerialPortEvent.CTS:
11
        case SerialPortEvent.DSR:
12
        case SerialPortEvent.FE:
13
        case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
14
        case SerialPortEvent.PE:
15
        case SerialPortEvent.RI:
16
        default:
17
        }
18
      }
19
    }

wie gesagt das senden funktioniert.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Hendrik Leuchtemann schrieb:
> Es wird ja unter Windows noch nicht einmal der SerialPortEventListener
> aufgerufen.

Na und? Der wird auch nur aufgerufen wenn (nach Meinugn des Treibers) 
Daten vorliegen, falls die Schnittstelle puffert dauert es ggf. (zu) 
lange. Das Eventbasierte Lesen ist meiner Meinung nach auch nicht so 
optimal für eine Streamkommunikation, mach doch mal versuchsweise einen 
Thread der blockierend direkt vom Inputstream liest.

von Hendrik L. (split)


Lesenswert?

da kommt auch nichts. Was ist den Optimal für Eventbasiertes Lesen?

von Hendrik L. (split)


Lesenswert?

Normalerweise blinkt die Tx LED am Arduino wenn er sendet (wenn das Port 
offen ist) macht sie aber nicht.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Zeig doch mal dein ganzes Testprogram. Das senden des Arduino sollte 
vollkommen unbeeindruckt davon sein ob überhaupt was angeschlossen oder 
"verbunden" ist, auf welchen Trigger hin sendet der den was?

von Hendrik L. (split)


Angehängte Dateien:

Lesenswert?

Anbei das Arduino programm und das Java Programm.

von bluppdidupp (Gast)


Lesenswert?

1
if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
2
      try {
3
        String inputLine=input.readLine();
4
        System.out.println(inputLine);
...das sieht für mich problematisch aus: Was ist wenn der Puffer noch 
gar keinen Zeilenumbruch enthält? (k.A. wie sich Java da verhält)
Was wenn man bei Data-Available einfach mal ne Messagebox anzeigt oder 
dort nen Haltepunkt setzt? Geht er da jemals rein?

von Hendrik L. (split)


Lesenswert?

nein, da geht er nicht rein, wenn ich die if abfrage auskommentiere sagt 
er mir das readline 0 daten enthält.

von bluppdidupp (Gast)


Lesenswert?

Was man noch machen könnte wäre mit setFlowControlMode() rumspielen:
Einige CDCs benötigen z.B. seltsamerweise explizit FLOWCONTROL_RTSCTS_IN 
und FLOWCONTROL_RTSCTS_OUT

von Hendrik L. (split)


Lesenswert?

mit dem FlowControl bringt auch nichts, ich hab das programm auch mal 
auf einem anderem Windowsrechner ausprobiert, da ist das selbe Problem.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Hendrik Leuchtemann schrieb:
> Anbei das Arduino programm und das Java Programm.

Bitte einmal als Zip, sodass man das auch ohne Spezialsoftware lesen 
kann...

bluppdidupp schrieb:
> ..das sieht für mich problematisch aus: Was ist wenn der Puffer noch gar
> keinen Zeilenumbruch enthält?

Dann blockiert der dort... Deshalb ist der Eventbasierte Ansatz hier 
auch komplett für den Abfalleimer.

von Hendrik L. (split)


Lesenswert?

mit rxtx version RXTX-2.1-7 funktionierts. danke.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Läubi .. schrieb:
> Bitte einmal als Zip, sodass man das auch ohne Spezialsoftware lesen
> kann...

Für Windows ist hier 7zip zu empfehlen, das kann das. Und gegenüber der 
windows-eigenen Zip-"Unterstützung" ist es sowieso zu bevorzugen.

Auf dem Mac ist z.B. BetterZip ein gutes Äquivalent.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Möglich aber warum sollte ich die Hürde für Leute die freiwillig Helfen 
wollen noch extra hoch setzen ohne Vorteil.

von Mark B. (markbrandis)


Lesenswert?

Naja, soooo exotisch ist RAR jetzt auch wieder nicht. Im Zweifelsfall 
sollte man aber lieber das Format mit der größeren Verbreitung nehmen, 
da hast Du schon Recht.

Und eine einzelne Datei komm_test.ino mit einer Größe von unter einem KB 
noch zu packen, wo die Datei schon auf einem üblichen Datenträger mehr 
Platz belegt als sie Bytes hat, egal ob gepackt oder ungepackt - das 
wiederum ist exotisch. ;-)

: Bearbeitet durch User
von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Mark Brandis schrieb:
> Naja, soooo exotisch ist RAR jetzt auch wieder nicht

Naja, es ist einfach ein proprietäres Format mit dem man nur Ärger hat 
(Versionsinkomptibilitäten, defekte Archive noch und nöcher, 
'eigentlich' darf nur der Erfinder Kompressionsprogramme bereitstellen, 
....) und ich muss halt extra Software installieren.

von bluppdidupp (Gast)


Lesenswert?

Ich hatte ehrlich gesagt noch nie Probleme mit rar.
Die Wiederherstellungsinformationen waren damals zu Modem/ISDN-Zeiten 
ein Segen gegenüber zip.

von bluppdidubb (Gast)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Für Windows ist hier 7zip zu empfehlen, das kann das. Und gegenüber der
> windows-eigenen Zip-"Unterstützung" ist es sowieso zu bevorzugen.

Ich habe mit 7-zipp arge Probleme. Eines morgens stellte ich meinen 
Rechner an und da ging nix mehr mit 7zip, nachdem ein neues 
Windows-Patch eingespielt worden war. Danach machte ich die 
Aktualisierung rückgängig und alles war nicht mehr wie früher. Das 7zip 
war einfach nicht mehr da, es hatte sich verpflüchtigt und später im 
Toaster versteckt.

Ich stellte den Toaster zum Frühstück an und hatte gezippte Brote.

So nen Kääs.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

bluppdidubb schrieb:
> Das 7zip war einfach nicht mehr da, es hatte sich
> verpflüchtigt und später im Toaster versteckt.

Und Du nimmst an, daß die Ursache solcher Probleme tatsächlich 7zip sein 
soll?

von Franz (Gast)


Lesenswert?

> Ich habe
>das Java Programm aus dem Arduino Playground genommen und erst mal
>geschaut ob ich was lesen kann, unter Linux geht es, unter Windows
>nicht, daraufhin hab ich den Hyperterminal gestartet und mit den selben
>einstellungen "COM2" 9600 8N1 die werte vom Arduino bekommen. Daraufhin
>hab ich das Java Programm unter Linux so geändert das ich den Ausgan mit
>dem Befehl an/und ausschalten kann. dasselbe dann in Windows gestartet,
>daraufhin konnte ich den Ausgan schalten, aber keine Werte empfangen.

Mit diesem Problem hatte ich vor ca. 3/4 Jahren auch mal eine Zeitlang 
gekämpft. Wenn ich recht erinnere, war es ein Fehler in RxTx. Die 
Einstellung der Handshake-Leitungen wir bei Windows und Linux 
unterschiedlich interpretiert. Den genauen Ort kann ich Dir nicht mehr 
sagen. Es sollte helfen, mit den Einstellungen zu spielen oder einen 
Demo Code von RxTx für Windows zu suchen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.