kein Datenempfang mit Windows (Java RXTX)

OP #3473242
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??
Gast #3473593
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;)
Persönliche Seite #3473608
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).
OP #3473628
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.
OP #3474277
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.
Persönliche Seite #3474470
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.
Gast #3475367
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?
Persönliche Seite #3475848
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.
#3479430
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. ;-)
Gast #3479986
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.
Gast #3480277
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren