Arduino Sketch mit einfachen Processing Sketch kombinieren?

Hey,
ist es möglich einen normalen Processing Sketch der mir beispielsweise ein Rechteck malt und einen Arduino Sketch, der LEDs steuert in einem Sketch zu kombinieren?
Also dass ich lediglich einen Play/Upload Button klicken muss und beides startet, statt zwei verschieden Programme gleichzeitig zu starten..

Danke schonmal!

Franzi:
ist es möglich einen normalen Processing Sketch der mir beispielsweise ein Rechteck malt und einen Arduino Sketch, der LEDs steuert in einem Sketch zu kombinieren?
Also dass ich lediglich einen Play/Upload Button klicken muss und beides startet, statt zwei verschieden Programme gleichzeitig zu starten..

Und wie sollen wir das beantworten, ohne dass wir die Sketchen kennen?

Poste bitte beide Sketche hier in "Code-Tags". Verwende dazu die Schaltfläche "</>" im Editor.

Oh sorry.. also hier einmal der Arduino Sketch, welcher LED Strips steuert. Funktioniert einwandfrei.

const int REDPIN = 3;
const int GREENPIN = 5;
const int BLUEPIN = 6;


void setup() {
  
pinMode(REDPIN, OUTPUT);
pinMode(GREENPIN, OUTPUT);
pinMode(BLUEPIN, OUTPUT);

}

void loop() {

//alle LEDS aus
analogWrite(REDPIN,0);
analogWrite(GREENPIN,0);
analogWrite(BLUEPIN,0);


delay(5000);               //STart dunkel


//LILA   -> ohne delay                       
    
  analogWrite(REDPIN,120);
  analogWrite(BLUEPIN,255);
  
  
delay(800);

for(int i=170;i>=0;i-=5){     //fade out
  analogWrite(REDPIN,i);
  analogWrite(BLUEPIN,i);
  delay(40);
  }


//es ist was es ist, pause und Nächste Strophe
delay(6000);             


//fade mittelblau
analogWrite(REDPIN,0);       //alle LEDs aus
analogWrite(GREENPIN,0);
analogWrite(BLUEPIN,0);

for(int i=0;i<=100;i+=5){      
  analogWrite(BLUEPIN,i);
  analogWrite(GREENPIN,i);
  delay(40);
  }
  
delay(800);

for(int i=100;i>=0;i-=5){     
  analogWrite(BLUEPIN,i);
  analogWrite(GREENPIN,i);
  delay(40);
  }


// zwischen den Versen 3sec
delay(4000);               


//strobo rot
analogWrite(REDPIN,0);
analogWrite(BLUEPIN,0); 
analogWrite(GREENPIN,0);     
 
digitalWrite(REDPIN,HIGH);  
delay(50);
digitalWrite(REDPIN,LOW);
delay(50);
digitalWrite(REDPIN,HIGH);  
delay(50);
digitalWrite(REDPIN,LOW);
delay(50);
digitalWrite(REDPIN,HIGH);  
delay(50);
digitalWrite(REDPIN,LOW);
delay(50);
digitalWrite(REDPIN,HIGH);  
delay(50);
digitalWrite(REDPIN,LOW);
delay(50);
digitalWrite(REDPIN,HIGH);  
delay(50);
digitalWrite(REDPIN,LOW);
delay(50);
digitalWrite(REDPIN,HIGH);  
delay(50);
digitalWrite(REDPIN,LOW);

// zwischen den Versen 3sec
delay(4000);


//fade
analogWrite(REDPIN,0);    
analogWrite(GREENPIN,0);
analogWrite(BLUEPIN,0);

for(int i=0;i<=50;i+=5){      
  analogWrite(REDPIN,i);
  analogWrite(GREENPIN,i);
  analogWrite(BLUEPIN,i);
  delay(40);
  }
  
delay(800);

for(int i=50;i>=0;i-=5){     
  analogWrite(REDPIN,i);
  analogWrite(GREENPIN,i);
  analogWrite(BLUEPIN,i);
  delay(40);
  }


//es ist was es ist, pause und Nächste Strophe
delay(6000); 


//fade  grün
analogWrite(BLUEPIN,0);
analogWrite(REDPIN,0);

for(int i=0;i<=255;i+=5){
  analogWrite(GREENPIN,i);
  delay(40);
  }

delay(800);

for(int i=255;i>=0;i-=5){
  analogWrite(GREENPIN,i);
  delay(40);
  }


// zwischen den Versen 3sec
delay(4000);


//fade haltes hellblau
analogWrite(REDPIN,0);    //alle LEDs aus
analogWrite(GREENPIN,0);
analogWrite(BLUEPIN,0);

for(int i=0;i<=140;i+=5){      
  analogWrite(BLUEPIN,i);
  analogWrite(GREENPIN,0);
  delay(40);
  }
  
delay(800);

for(int i=140;i>=0;i-=5){     
  analogWrite(BLUEPIN,i);
  analogWrite(GREENPIN,0);
  delay(40);
  }


// zwischen den Versen 3sec
delay(4000);


//fade weiß, licht wird immer heller bis ende, dann alles dunkel
analogWrite(REDPIN,0);    
analogWrite(GREENPIN,0);
analogWrite(BLUEPIN,0);

for(int i=0;i<=255;i+=5){      //nur fade in
  analogWrite(REDPIN,i);
  analogWrite(GREENPIN,i);
  analogWrite(BLUEPIN,i);
  delay(60);
  }

delay(800);

analogWrite(REDPIN,0);         //alles plötzlich aus
analogWrite(GREENPIN,0);
analogWrite(BLUEPIN,0);


delay(5000);               //ENDE/PAUSE dunkel
}

Der einfache Processing Sketch is noch in Arbeit, soll sich aber daran orientieren:

import processing.video.*;

String PATH = "/path/to/one/of/your/movies/blabla.mp4";
Movie mov;

void setup() {
  size(640, 360);
  frameRate(30);
  mov = new Movie(this, PATH);
  mov.play();
  mov.speed(5);
  mov.volume(0);
}
void movieEvent(Movie m) {
  m.read();
}
void draw() {
  image(mov, 0, 0, width, height);
}

Was ist ein "normaler Processing Sketch" und wo soll der mal laufen und ein Rechteck malen?

Ein Arduino Sketch läuft üblicherweise auf einem Arduino, und da kann man mit relativ wenig Aufwand ( 1 Led + 1 Widerstand ) ein paar Leds anschliessen.

Ein Arduino Sketch muss üblicherweise nicht gestartet werden, kann aber auf Ereignisse "von aussen" reagieren...

"aussen" kann auch ein Processing sketch auf einem PC oder raspberry sein, wenn beide Geräte passend verbunden sind.

wobei du am Raspberry auch direkt eine Led anschliessen kannst, aber da wärst du im falschen Forum hier.

Der Processing Sketch soll auf meinem Monitor laufen und ein Video abspielen,
der Arduino ist mit LED Strips verbunden, wozu ich schon den passenden Arduino Sketch habe.
Das Video und die LEDs am Arduino sollten insofern synchronisiert sein, dass ich nicht zwei Programme starten/hochladen muss, die sich eventuell nach gewisser Zeit verschieben, sondern ich beides abhängig voneinander starten kann.

Also wie müsste so ein Processing Sketch aussehen, dass dieser dem Arduino sagt wann die LEDs starten sollen?

Die zwei könnten sich z.B. über eine Serielle Verbindung unterhalten

Arduino Sketch:

void setup() {
   Serial.begin(9600);
...
}

void loop() {
   while (  Serial.available() == 0 ) {} // hängt, bis etwas kommt
   while ( serial.read() != -1 ) { delay(10); } alles weglesen was gekommen ist

   doAnimation(); // dauert knapp genauso lange wie das Movie

}

void doAnimation() {
   // hier deine LED Ansteuerung mit allen delays
...  
}

Jetzt muss dein Processing nur noch zur Synchronisation irgendwas an die richtige serielle Schnittstelle ausgeben, damit der Arduino Sketch weiterläuft...

Nein, es kann kein einziger Sketch sein. Es müssen immer 2 Sketch sein (einer auf Arduino und einer auf dem PC). Du kannst aber Arduino mit dem PC über COM verbinden sodaß einer den Sketch des anderen startet.
Grüße Uwe

Cool, Danke!

Den Arduino Sketch bekomm ich hin..
Aber was muss denn da in den Processing Sketch? Damit kenn ich mich leider nicht aus..
Also wie müsste der Processing Sketch aussehen, um etwas an die richtige serielle Schnittstelle auszugeben, und so den Arduino steuert?

Du wirst den Portindex anpassen müssen, aber als Start hoffentlich brauchbar

import processing.serial.*;

Serial myPort;
String serIn = "";

void setup() {
  size(1024, 512);
  background(0);
  stroke(255);

  printArray(Serial.list());
  String portName = Serial.list()[5];   // <----
  myPort = new Serial(this, portName, 115200);
}

void draw() {
}

void serialEvent(Serial myPort) {
  int  inByte = myPort.read();
  serIn += char(inByte);
  if (inByte == '\n') {
    print(serIn);
    serIn = "";
  }
}

void keyPressed() {
  if (key != CODED) {
    myPort.write(key);
  }
}

Arduino sendet Echo

void setup() {
  Serial.begin(115200);
}

void loop() {
  if (Serial.available()) {
    Serial.write(Serial.read());
  }
}