Arduino Sketch und Processing Sketch verknüpfen

In meinem Projekt geht es darum, dass ich einen Processing Sketch habe, in dem 16 Videos abgespielt werden. Diese sollen je nach Abstand abgespielt werden. Ich verwende dazu einen HC - SR05 Ultraschallsensor. Der Sketch in Arduino IDE funktioniert soweit und mir wird im Serial Monitor eine Distanz angezeigt.

Ich verstehe nur einfach nicht wie ich die beiden Sketch jetzt miteinander verbinden kann, das der Processing Sketch, mit der Distanz des Ultraschalsensors arbeitet. (Derzeit habe ich noch die key pressed Funktion drin, um das ganze zu simulieren - der Code in Processing funktioniert auch einwandfrei)

Anbei beide Codes
(beim Processing Sketch fehlt die Klasse aber das ist für dieses Thema unrelevant)

Danke schon mal

Arduino IDE Code

const int TRIG_PIN = 12;
const int ECHO_PIN = 13;
 
void setup() 
{
  // initialize serial communication:
  Serial.begin(9600);
  pinMode(TRIG_PIN,OUTPUT);
  pinMode(ECHO_PIN,INPUT);
}
 
void loop()
{
  long duration, distanceCm, distanceIn;
 
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);
  duration = pulseIn(ECHO_PIN,HIGH);
 
  // convert the time into a distance
  distanceCm = duration / 29.1 / 2 ;
  distanceIn = duration / 74 / 2;
 
  if (distanceCm <= 0)
  {
    Serial.println("Out of range");
  }
  else 
  {
    Serial.print(distanceIn);
    Serial.print("in: ");
    Serial.print(distanceCm);
    Serial.print("cm");
    Serial.println();
  }
  delay(1000);
}

Processing Code

 import processing.video.*;

VideoBox videoBox0;
VideoBox videoBox1;
VideoBox videoBox2;

float user_distance = 5;

ArrayList<VideoBox> videoBoxes = new ArrayList<VideoBox>();

int numberVideoBoxes =16;

float nbRows = 4;
float nbCols = 4;

float wVideoBox;
float hVideoBox;

int[] video_distance = { 10, 20, 30, 40,
                         50, 60, 70, 80,
                         40, 30, 20, 10,
                         60, 40, 30, 20
                        };
// in centimeter


void setup() {

  size(720, 576
  );
  //fullScreen();

  int w = 100;
  int h = 100;

  wVideoBox = width/4;
  hVideoBox = height/4;


  for (int i=0; i<numberVideoBoxes; i++) {


    VideoBox v = new VideoBox(this, "panic_" + i + ".mov"); 
    float xPos = i%nbCols * wVideoBox; 
    float yPos = floor(i/nbCols) * hVideoBox;
    println(xPos, yPos);
    v.setup(i, xPos, yPos, wVideoBox, hVideoBox, video_distance[i]);
    videoBoxes.add(v);
  }





void keyPressed() {
  if (key == CODED) {
    if (keyCode == UP) {
      user_distance = user_distance + 10;
    } else if (keyCode == DOWN) {
      user_distance = user_distance - 10;
    }
  }
}

void draw() {

  background(0);

  for (int i=0; i<numberVideoBoxes; i++) {
    VideoBox videoBox = videoBoxes.get(i);
    videoBox.checkDistance(user_distance);
    videoBox.display();
  }


void movieEvent(Movie m) {
  m.read();
}

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden.
Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.
mfg ein Moderator.

1 Like

Connecting Arduino to Processing - SparkFun Learn

1 Like

Du schickst vom Arduino über USB die Abstandswerte und Processing liest über die USB-Serielle Schnittstelle den Wert.

Grüße Uwe

1 Like

was muss ich dazu im Code ändern ?

Vielen lieben Dank !

Hier ist ein kleines Beispiel

arduino:

void setup() {
  Serial.begin(115200);                 // Initialisiere die serielle Kommunikation mit 115200 Baud
  randomSeed(analogRead(A0));           // Initialisiere die Zufallsgenerierung
}

void loop() {
  int zufallsWert = random(-40, 61);    // Generiere eine zufällige Zahl zwischen -40 und 60
  Serial.println(zufallsWert);          // Sende die zufällige Zahl an Processing
  delay(2000);                          
}

Processing

import processing.serial.*;

Serial schnittstelle;
int temperatur = 0;

color waehleFarbeFurTemperatur(int t) {
  if (t < 0) {
    return color(0, 0, 255); // Blau für negative Temperaturen
  } else if (t < 25) {
    return color(0, 128, 0); // Grün für positive Temperaturen unter 25
  } else {
    return color(255, 0, 0); // Rot für Temperaturen über 25
  }
}

void setup() {
  size(400, 200);  
  schnittstelle = new Serial(this, "/dev/cu.usbserial-0001", 115200); // Ändern Sie dies entsprechend Ihrer Konfiguration
}

void draw() {
  background(220);
  if (schnittstelle.available() > 0) {
    temperatur = int(schnittstelle.readStringUntil('\n').trim()); // Liest die empfangene Temperatur von Arduino
  }
  textSize(32);
  textAlign(CENTER, CENTER);
  fill(waehleFarbeFurTemperatur(temperatur)); // Wählt die Textfarbe basierend auf der Temperatur aus
  text("T°: " + temperatur, width / 2, height / 2);
}
1 Like

Das steht doch im Link in #3.

Grüße Uwe

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