Willkommen auf unserem Seminar-Blog

Immer auf dem aktuellen Stand bleiben

Dieser Seminar-Blog befindet sich noch im Aufbau und wird in den kommenden Tagen entsprechend verfeinert.

Member Login

Lost your password?

Registration is closed

Sorry, you are not allowed to register by yourself on this site!

You must either be invited by one of our team member or request an invitation by email at viad.info {at} zhdk {dot} ch.

09 AnalogIn

22. November 2011

Fächer Interactive

  Nun galt es Arduino mit Processing zu verbinden und Sensor-Eingaben visuell mit Processing abzubilden. Ich habe dafür einen Druck- und Entfernungssensor verwendet. In Processing habe ich einen Fächer programmiert, Mit dem Drucke steuern.

import processing.serial.*;

//
Serial myPort;
Agent [] agenten;
//
int potiValue = 0;
int potiValue1 = 0;

void setup() {
background(0);
size(1280, 700);
smooth();
//stroke(204, 102, 0);
myPort = new Serial(this, Serial.list()[0],9600);

// hier wird ein Array für 10 Agenten erzeugt
agenten= new Agent[10];
for (int i=0; i<agenten.length; i++) {
agenten[i]=new Agent(width/2, height/2, 5);
}
// die Agenten selber werden erzeugt

}

void draw() {
// für den Spur, die die Agenten hinterlassen
//println(potiValue);
stroke(map(potiValue1,0,1023,0,255), 102, map(potiValue,0,1023,0,255));
println(potiValue1);
fill(0,2);
rect(-10, -10, width+10, height+10);

//alle Agenten müssen die Position ändern

for (int i=0; i<map(potiValue,1023,0,0,agenten.length); i++) {
//jeder Agent wird gezeichnet
agenten[i].render();
//jeder Agent muss die Position ändern
agenten[i].move();
}
}





void serialEvent(Serial myPort){
if(myPort.available() > 0)
{
String completeString = myPort.readStringUntil(10);
if(completeString != null)
{
trim(completeString);
String[] seperateValues = split(completeString,',');
potiValue = int(seperateValues[0]);
potiValue1 = int(seperateValues[1]);

}
}

}
Klasse Agent  

class Agent {

// Variablen
PVector position;
PVector direction;
float spin = 0.1;
float radius; // 3. Radius

//der Konstruktor für die Agenten-Klasse
Agent (float theX, float theY, float aradius) {
position    = new PVector (theX, theY);
direction   = new PVector (10, 10);
direction.x = random (-1, 1);
direction.y = random (-1, 1);
radius = aradius;

}


//eine Methode
void render() {

//einkommentiert ergibt sich hieraus Fächer-Muster
line(position.x, position.y, width/2, height/2);
// ellipse(position.x, position.y,5,5);
//rect(position.x, position.y,5,5);
}

//Methode
void move() {

//die Agenten ändern ihre Richting nicht abrupt, sondern immer nur ein wenig!
direction.x += random (-spin, spin);
direction.y += random (-spin, spin);

//for a constant speed
direction.normalize();

// hier kann man die Geschwindigkeit ändern
direction.mult(map(potiValue1,0,1023,0,10));

position.add(direction);

//damit die Agenten das Bild nicht verlassen
if (position.x < radius || position.x > (width-radius)) {
direction.x *= -1;
}
if (position.y < radius || position.y > (height-radius)) {
direction.y *= -1;
}
}
}