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; } } }