Lesen und schreiben von Com Port

Hallo Arduino Community

Ich versuche in einer Processing Anwendung mit Serial.write() auf COM5 zu schreiben und möchte diese Daten mit Arduino, mit Serial.read(), vom gleichen Port lesen.
Allerdings bekomme ich immer den unten stehenden Fehler, wenn ich beide Anwendungen gleichzeitig laufen lasse.

Wäre schön wenn mir jemand weiter helfen könnte.

ClaudeMichelle

processing.app.SerialException: Serial port ‘COM5’ already in use. Try quiting any programs that may be using it.

at processing.app.Serial.(Serial.java:140)

at processing.app.Serial.(Serial.java:72)

at processing.app.Uploader.flushSerialBuffer(Uploader.java:66)

at processing.app.AvrdudeUploader.uploadViaBootloader(AvrdudeUploader.java:73)

at processing.app.AvrdudeUploader.uploadUsingPreferences(AvrdudeUploader.java:48)

at processing.app.Sketch.upload(Sketch.java:1632)

at processing.app.Sketch.exportApplet(Sketch.java:1701)

at processing.app.Editor$42.run(Editor.java:2016)

at java.awt.event.InvocationEvent.dispatch(Unknown Source)

at java.awt.EventQueue.dispatchEvent(Unknown Source)

at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.run(Unknown Source)

processing.app.SerialException: Serial port ‘COM5’ already in use. Try quiting any programs that may be using it.

at processing.app.Serial.(Serial.java:140)

at processing.app.Serial.(Serial.java:63)

at processing.app.Editor.handleSerial(Editor.java:1497)

at processing.app.EditorButtons.mousePressed(EditorButtons.java:373)

at java.awt.Component.processMouseEvent(Unknown Source)

at java.awt.Component.processEvent(Unknown Source)

at java.awt.Container.processEvent(Unknown Source)

at java.awt.Component.dispatchEventImpl(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)

at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)

at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Window.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.EventQueue.dispatchEvent(Unknown Source)

at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.run(Unknown Source)

Hast Du rein zufällig während der Serial-Session auch die Arduino Serial-Console offen? Wenn ja funktioniert das nicht. Bei Serieller Datenübertragung ist IMHO nur ein "Stream" möglich.

LG, Sebastian.

Danke Sebastian

Die Kommunikation scheint tatsächlich, trotz dieser Fehlermeldung, zu funktionieren. Allerdings kann ich die Strings die ich mit Processing auf den Com Port schreibe auf der anderen Seite trotzdem nicht so auslesen wie ich es gern hätte.

Gibts da irgenwas zu beachten?
Ich schreibe mit Processing zu erst die Länge des Strings, gefolgt vom eigentlichen String.
Überträgt Processing noch andere Daten wie z.B. Kontrolldaten?

Mein Programm sieht in etwa so aus:

int parameterSize = -1;
LiquidCrystal lcd(2, 4, 3, 7, 8, 9, 10, 11, 12, 13, 14);

void loop() {
   
   readSizeOfParameter();
   
   readParameter( parameterSize );
 }
 
 void readParameter()
 {
     int receivedInts[ parameterSize ];
     char cptr[ parameterSize ];
     if (Serial.available() >= parameterSize) 
     {
         blink( parameterSize );
         for(int i=0; i < parameterSize; i++)
         {
            receivedInts[i] = Serial.read(); // read it and store it in receivedString[numberCharsRead]
            cptr[ i ] = char( receivedInts[i] );           
            Serial.println( cptr[ i ]);
         }
         lcd.clear();
         lcd.print( cptr ); 
     }
 }
 
 void readSizeOfParameter()
 {
    if (Serial.available() > 0) { 
        parameterSize = Serial.read(); // read parameterSize
    }
 }

Der erste String erscheint auf dem Display, allerdings mit einem angehängten weiteren Buchstaben, der da eigentlich nicht hin gehört.

Wenn ich dann weitere Strings übertragen will tut sich nichts mehr.

Wäre nett wenn mir jemand was dazu sagen könnte.

Michael