versuche gerade Daten vom Arduino mit Processing darzustellen. Aber als erstes wollte ich zwei Processing Anwendungen schreiben die mit einander kommunizieren können. Die eine Anwendung soll den COM Port öffnen und Daten in ihn schreiben, das zweite Programm soll den Comport öffnen und die Daten aus dem Port lesen.
// Example by Tom Igoe
import processing.serial.*;
// The serial port:
Serial myPort;
// List all the available serial ports:
println(Serial.list());
// Open the port you are using at the rate you want:
myPort = new Serial(this, Serial.list()[0], 9600);
// Send a capital "A" out the serial port
myPort.write(65);
Hier der Fehler der entsteht: ArrayIndexOutOfBoundsException: 0
Stable Library
=========================================
Native lib Version = RXTX-2.1-7
Java lib Version = RXTX-2.1-7
Exception in thread "Animation Thread" java.lang.ArrayIndexOutOfBoundsException: 0
at sketch_121210a.setup(sketch_121210a.java:29)
at processing.core.PApplet.handleDraw(PApplet.java:2117)
at processing.core.PGraphicsJava2D.requestDraw(PGraphicsJava2D.java:193)
at processing.core.PApplet.run(PApplet.java:2020)
at java.lang.Thread.run(Thread.java:662)
Ich kenne mich mit java leider nicht so gut aus, wie kann ich den Fehler beheben
MHh wenn ich das mache, dann erzeugt er einen Fehler wenn ich in den Comport schreiben möchte:
Native lib Version = RXTX-2.1-7
Java lib Version = RXTX-2.1-7
java.lang.NullPointerException
at processing.serial.Serial.write(Unknown Source)
at Simula.draw(Simula.java:51)
at processing.core.PApplet.handleDraw(PApplet.java:2142)
at processing.core.PGraphicsJava2D.requestDraw(PGraphicsJava2D.java:193)
at processing.core.PApplet.run(PApplet.java:2020)
at java.lang.Thread.run(Thread.java:662)
Exception in thread "Animation Thread" java.lang.RuntimeException: Error inside Serial.write()
at processing.serial.Serial.errorMessage(Unknown Source)
at processing.serial.Serial.write(Unknown Source)
at Simula.draw(Simula.java:51)
at processing.core.PApplet.handleDraw(PApplet.java:2142)
at processing.core.PGraphicsJava2D.requestDraw(PGraphicsJava2D.java:193)
at processing.core.PApplet.run(PApplet.java:2020)
at java.lang.Thread.run(Thread.java:662)
verstehe, aber wie kann ich einen Eintrag machen, also wie kann ich einen COM port festlegen?
Sobald ich den Arduino an den PC anschließe, funktioniert das Programm, weil er dann einen COM Port zugewiesen bekommt.
Vielleicht solltest Du erst mal definieren, was Du genau willst. Willst Du immer auf Deine Serielle Schnittstelle zugreifen? Oder immer auf Deinen Arduino? Letzteres geht meines Wissens unter Windows nicht, da Du dort die Zuweisung zu den Com-Ports nicht festlegen kannst.
Du könntest Deinen Code so abändern:
// Open the port you are using at the rate you want:
if (! Serial.list().isEmpty()) {
myPort = new Serial(this, Serial.list()[0], 9600);
// Send a capital "A" out the serial port
myPort.write(65);
}
Damit greifst Du nur noch auf den Port zu, wenn er auch zur Verfügung steht.
Du kannst in Processing keinen COM-Port anlegen. Ein COM-Port ist ein in der Regel physisch vorhandenes Gerät auf das man seriell zugreifen kann.
Wenn Du den Arduino an den PC steckst, meldet der sich als genau so ein Gerät bei Deinem PC. Der COM-Port ist dann die Schnittstelle über den dann auf den Arduino zugegriffen werden kann.
Es gibt Software, die auf dem PC eine serielle Schnittstelle simuliert und damit so tut als wäre ein entsprechendes Gerät angeschlossen.
Processing kann also nur auf schon am PC vorhandene serielle Schnittstellen zugreifen, egal was für eine Gerät das erstmal ist.
Schau Dir mal folgende Software an, evtl. hilft die Dir bei Deinen Tests:
Hi,
das hilft mir schon mal viel weiter,wenn ich weiß das Processing kein COM Port erstellen kann dann brauche ich das mit dem Programm nicht weiter versuchen :D.
Ich versuche es jetzt mit VS2010 und C++, habe hier schon eine API gefunden die auch in den Seriellen COM Port schreibt und ließt, deshalb habe ich mir gedacht das ich damit einen COM Port anlegen kann, und die Daten mit Processing auswerte aber auch das funtkioniert nicht, er verlangt das ich ein Gerät über USB Kabel anschließe. Dann dachte ich mich das ich einfach ein Gerät im Geräte Manager erzuege, aber ohne Treiber und dann diesen Port benutze, aber auch das funktioniert nicht.
Anscheinend ist das nicht so einfach so einen Port selbst zu erzeugen ...
Ja ich werde mir das Programm mal anschauen, vllt. klappt es ja damit.
habe im Netz gelsen das das schon mehrere Leute versucht haben, aber alle haben ein externes Programm genutzt, welches einen virtuellen COM port erzeugt.
Man kann zwar auch einen mi VS und c++ bauen, allerdings muss man dann dafür auch einen Treiber für den Port programmieren.
Wenn ich nun dein Programm verwende erzeugt er zwei virtuelle COM Ports die er mit einander verbindet, einen dieser Ports nutze ich für meine Übertragung und es klappt auch :D.
Werde mir jetzt noch ein Programm suchen, welches nur einen COM port anlegt und nicht zwei miteinander verbindet, das brauche ich ja nicht, außerdem kostet deine Version Geld vllt. finde ich ja was Open source mäßiges
danke für die Hilfe, wäre glaube ich nicht alleine draufgekommen
Schön, das es jetzt funktioniert. Ich bezweifle aber, das Dir ein virtueller COM-Port reicht, wenn Du zwei Programme laufen lassen willst. Normalerweise ist der Zugriff auf einen Com-Port exklusiv, damit sich nicht zwei Programme in die Quere kommen und sich gegenseitig die Daten klauen.
Ich denke die Lösung mit den 2 virtuellen und verbundenen COM-Ports ist genau das was Du brauchst, um zwei Programme kommunizieren zu lassen.