Arduino und Processing Fehler bei serieller Übertragung

Hallo, ich bin relativer Anfänger mit Arduino und versuche gerade mit dem GY-521 bzw. MU6050 etwas Sinnvolles ans Laufen zu bekommen. Dabei bin ich über "Processing" gestoßen als Möglichkeit am PC die Daten des Sensors darzustellen.
Ich versuche daher aktuell mit diesem Tutorial Daten vom Arduino an Processing zu schicken und andersherum.

Dabei ist folgendes Problem aufgetreten:
Wenn ich versuche von Processing zum Arduino zu schicken, bekomme ich immer den Fehler, dass der entsprechende Port COMX gesperrt sei (bei der Seite, die ich als zweites starte). Ich benutze folgenden Code:

Arduino:

char val;
int ledPin=13;

void setup() {
  // put your setup code here, to run once:
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  if(Serial.available()){
    val = Serial.read();
  }
  if(val == '1'){
    digitalWrite(ledPin, HIGH);
    Serial.println("1");
  }else{
    digitalWrite(ledPin, LOW);
    Serial.println("0");
  }
  delay(100);
}

Processing:

import processing.serial.*;

Serial myPort;

void setup(){
   size(200,200);
   String portName = "COM7";//Serial.list()[1];
   myPort = new Serial(this, portName, 9600);
   //print(portName);
}

void draw()
{
//  if ( myPort.available() > 0) 
//  {  // If data is available,
//  val = myPort.readStringUntil('\n');         // read it and store it in val
//  } 
//println(val); //print it out in the console
  if(mousePressed == true){
     myPort.write('1');
     println("1");
  }else{
     myPort.write('0');
     println("0");
   }
}

Ich habe es sowohl mit einem Elegoo Uno R3 als auch mit einem AZ-ATmega328-Board versucht, bei beiden das gleiche. Ich verwende die Arduino IDE 2.2.1 und Processing 4.3 unter Windows 11 22H2. Für den AZ-AT habe ich den alten CH340.ser Treiber installiert, um überhaupt ein Programm draufladen zu können.

Zweites kleineres Problem bei der Übertragung von Arduino zu Processing:
Der Elegoo gibt mir bei folgendem Code immer abwechselnd "null" und "Hello World!" aus mit folgendem Code, während es auf dem AZ-AT nur das "Hello World!" ausgibt.

Code Arduino:

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.println("Hello, world!");
  delay(100);
}

Code Processing:

import processing.serial.*;

Serial myPort;
String val;

void setup(){
   String portName = Serial.list()[1];
   myPort = new Serial(this, portName, 9600);
   print(portName);
}

void draw()
{
  if ( myPort.available() > 0) 
  {  // If data is available,
  val = myPort.readStringUntil('\n');         // read it and store it in val
  
  println(val); //print it out in the console
  } 
}

Wenn ich dann allerdings versuche auch den Seriellen Monitor zu öffnen, gibt es wieder den Fehler "Could not connect to COMX serial port."

Ich würde gerne verstehen, wieso es diesen Fehler gibt und im besten Fall, wie ich es erreiche, dass beide Programme sich gegenseitig hören und senden können. Schonmal vielen Dank!

Serial ist kein Bus. Wenn also der serielle Monitor und Dein Prozessing-Programm gleichzeitig zugreifen wollen, bekommt der später Gestartete eine Fehlermeldung.

Gruß Tommy

Wenn das Betriebssystem es nicht verhindern würde, dass mehrere Programme gleichzeitig open auf einer Seriellen Schnittstelle machen können, sind trotzdem Empfangs- und Sendeleitung getrennt, so dass sie sich nicht gegenseitig beim Senden zuhören können. (Wenn nicht Tx und Rx gebrückt werden).

Welche Klimmzüge für ein Bussystem mit mehr als zwei Teilnehmern nötig wären, ist allerdings ein anderes Thema. Z.B. liefert der jeweilige Sender den Pegel für Tx. Mehrere Empfänger oder reine Zuhörer wären schon möglich.

Ja, aber nicht mit den vorhandenen "Plug-In-Mitteln".

Gruß Tommy

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.