[OT] Wie mit Processing zum Arduino senden?

Hallo,

ich habe einen Arduino an COM3 (unter Windows), welcher auf serielle Daten wartet. Dieser Teil funktioniert, ich kann via Serial Monitor mit ihm sprechen.

Nun würde ich gern via Processing zu ihm sprechen.

Im Processing-Beispiel SimpleWrite sieht der Setupteil so aus:

void setup() 
{
  size(200, 200);
  // I know that the first port in the serial list on my mac
  // is always my  FTDI adaptor, so I open Serial.list()[0].
  // On Windows machines, this generally opens COM1.
  // Open whatever port is the one you're using.
  String portName = Serial.list()[0];
  myPort = new Serial(this, portName, 9600);
}

Dämliche Frage: Was muss ich ändern, um COM3 zu öffnen?

Danke und Gruß,

Helmuth

Meine Beschäfrigung mit Processing ist schon einige Zeit her.
Wenn ich mich recht erinnere, dann geht es nicht "so direkt" einen bestimmten COM-Port zu öffnen. Sondern man kann eher nur einen "aus der Liste der vorhandenen" auswählen.
Das steht ja so auch in dem Beispielcode.

Du kannst dir aber eine Liste der vorhandenen Ports anzeigen lassen und dann "den richtigen" identifizieren.
Eine Liste kannst du dir so anzeigen lassen:

println(Serial.list());

Das Ergebnis könnte dann zum Beispiel so sein

[0] "COM2"
[1] "COM3"
[2] "COM6"
[3] "COM10"

In dem Fall würdest du dann zum Auswählen von COM3 schreiben

String portName = Serial.list()[1];

Danke für die Hinweise! Bei mir findet er nur COM3 und 0 ist auch der einzige Arrayindex, der nicht bemeckert wird.

Baudrate auf 115200 eingestellt, aber beim Arduino (auf welchem GRBL läuft) kommt nichts an. Mist.

Na dann muss ich morgen mal einen Arduino + Display als Serial Monitor hernehmen, um einzugrenzen, wo es klemmt.

Worum es eigentlich geht: CAM Daten direkt mit Processing zu generieren ist verlockend, v.a. bei Mustern, welche sich im CAD nur aufwendig erzeugen lassen, die aber andererseits mit wenigen Formeln beschrieben werden können.

Hier mal ein Beispielbild, dessen Daten ich zukünftig gern direkt streamen würde.

Ich habe mal eine RGB-LED über Serial mit Processing gesteuert.
Evtl. kannst Du davon was gebrauchen. Ich hänge es mal ran.

Den GUI-Teil kannst Du ja ignorieren.

Gruß Tommy

steuerung1.zip (16.5 KB)

Hier ein sehr sehr einfacher Code zum Testen ob da überhaupt was gesendet wird :slight_smile:
Also bei mir funktioniert das.

/**
*   Very Basic Serial Write Test. 
*/
// ##########################################
//     Processing-Code:
// ##########################################

import processing.serial.*;
boolean ledOn = false;

Serial myPort;  // Create object from Serial class

void setup() 
{
  size(200, 200);
  // I know that the first port in the serial list on my mac
  // is always my  FTDI adaptor, so I open Serial.list()[0].
  // On Windows machines, this generally opens COM1.
  // Open whatever port is the one you're using.
  println(Serial.list());
  String portName = Serial.list()[0];
  myPort = new Serial(this, portName, 9600);
}

void draw() {
  delay(1000); 
  background(150);
  ledOn = !ledOn;

  if (ledOn == true)
  {   fill(250,250,0);      // change color and
      myPort.write('H');    // send an H to serial
  }
  else
  {   fill(150);            // change color and
      myPort.write('L');    // send an H to serial
  }

  rect(50, 50, 100, 100);   // draw a square
}



/* 
// ##########################################
//   Arduino-Code:
// ##########################################

 
char val;          
int ledPin = 13;    
 
void setup() {
   pinMode(ledPin, OUTPUT); 
   Serial.begin(9600); 
}
 
void loop() {
   if (Serial.available()) { 
      val = Serial.read();  
      if (val == 'H') { 
         digitalWrite(ledPin, HIGH); 
      } 
      if (val == 'L') {
         digitalWrite(ledPin, LOW); 
      }
   }
}

*/

Fehler gefunden: Der Line Feed + "\n" hat gefehlt...

So funktioniert es:

myPort.write("G1 X" + x + " Y" + y + '\n');

Und man kann den zu benutzenden Port auch direkt festlegen:

Serial myPort;  
String portName="COM3";

void setup() {
  myPort = new Serial(this, portName, 115200); 
}

Gruß Helmuth