Hallo,
ich soll mit einem externen Gerät mit einer RS232 kommunizieren.
Zur Simulation verwende ich eine Arduino UNO auf dem folgender Code läuft:
Es ist für das Problem unerheblich, ob die LED und delay Funktion ausgeschalten wird.
Auf der java Seite verwende ich die jssc V2.6 Bibliothek.
Ich muss vorausschicken, dass die Kommunikation unter Processing 2 einwandfrei funktioniert.
Also habe ich mir, um mir das Leben zu erleichtern, die Serial Bibliothek aus Processing geschnappt und angepasst. Im groben, habe ich die Referenz auf PApplet entfern --> Anhang
Das klappt auch hinreichend bis auf eine unschöne Kleinigkeit.
Ich muss nach dem Open zwei Sekunden warten. sonst liefert mir das Read nur Unsinn.
a) Kann mir jemand sagen warum?
Wenn ich einen Schnittstellensnifer (docklight, terraterm, ...) verwende so antwortet der Arduino sofort.
b) Kann mir jemand sagen, wie ich herausfinden kann, ob die Kommunikation bereit ist? Es ist nicht zulässig ein Zeichen an das Gerät zu schicken um zu sehen ob es antwortet.
Meine Entwicklungs und Laufzeitumgebung:
Product Version: NetBeans IDE 7.4 (Build 201310111528)
Updates: NetBeans IDE is updated to version NetBeans 7.4 Patch 2
Java: 1.7.0_17; Java HotSpot(TM) 64-Bit Server VM 23.7-b01
Runtime: Java(TM) SE Runtime Environment 1.7.0_17-b02
System: Windows 7 version 6.1 running on amd64; Cp1252; de_AT (nb)
ich soll mit einem externen Gerät mit einer RS232 kommunizieren.
Zur Simulation verwende ich eine Arduino UNO auf dem folgender Code läuft:
Es ist für das Problem unerheblich, ob die LED und delay Funktion ausgeschalten wird.
Code:
int inByte = 0; // incoming serial byte
int led = 13;
void setup() {
// start serial port at 9600 bps:
Serial.begin(9600);
pinMode(led, OUTPUT);
}
void loop() {
if (Serial.available() > 0) {
inByte = Serial.read();
digitalWrite(led, HIGH);
delay(300);
Serial.write(inByte);
digitalWrite(led, LOW);
}
}
Auf der java Seite verwende ich die jssc V2.6 Bibliothek.
Ich muss vorausschicken, dass die Kommunikation unter Processing 2 einwandfrei funktioniert.
Also habe ich mir, um mir das Leben zu erleichtern, die Serial Bibliothek aus Processing geschnappt und angepasst. Im groben, habe ich die Referenz auf PApplet entfern --> Anhang
Das klappt auch hinreichend bis auf eine unschöne Kleinigkeit.
Ich muss nach dem Open zwei Sekunden warten. sonst liefert mir das Read nur Unsinn.
a) Kann mir jemand sagen warum?
Wenn ich einen Schnittstellensnifer (docklight, terraterm, ...) verwende so antwortet der Arduino sofort.
b) Kann mir jemand sagen, wie ich herausfinden kann, ob die Kommunikation bereit ist? Es ist nicht zulässig ein Zeichen an das Gerät zu schicken um zu sehen ob es antwortet.
Java:
package serial;
import jssc.SerialPortException;
public class Main {
static Serial serial;
static final String COM_NAME = "COM6";
public static void main(String args[]) throws SerialPortException, InterruptedException {
boolean comFound = false; // COM gefunden
// Pruefe ob COM installiert
for (String p : Serial.list()) {
if (p.equals(COM_NAME)) comFound = true;
}
// Abbruch, wenn nicht gefunden
if (!comFound) throw new IllegalArgumentException ("COM Schnittstelle nicht gefunden");
// Init RS232
serial = new Serial("COM6", 9600, 'N', 8, 1f);
// WARUM?
Thread.sleep(2000);
// Sende Ziffern 0 - 9
// und warte auf antwort
for (int x=0; x<9; x++) {
serial.write((byte) (x+0x30));
System.out.print((char)(x+0x30));
System.out.print('=');
int retval = -1;
while (retval == -1) {
retval = serial.read();
}
System.out.println((char)retval);
}
serial.clear();
serial.stop();
}
}
Meine Entwicklungs und Laufzeitumgebung:
Product Version: NetBeans IDE 7.4 (Build 201310111528)
Updates: NetBeans IDE is updated to version NetBeans 7.4 Patch 2
Java: 1.7.0_17; Java HotSpot(TM) 64-Bit Server VM 23.7-b01
Runtime: Java(TM) SE Runtime Environment 1.7.0_17-b02
System: Windows 7 version 6.1 running on amd64; Cp1252; de_AT (nb)