28. September 2012
Durch einen Schwamm, in den 4 Sensoren eingebaut wurden, lässt sich die grafische Ausgabe auf dem Bildschirm steuern. Der Startscreen besteht aus einem weissen Quadrat. Sobald man mit dem Schwamm interagiert verändern sich Form und Farbe des Elements. Drückt man den Schwamm, löst dies eine explosionsartige Animation aus. Je fester man drückt, desto grösser wird die Explosion. Hier wurde ein Piezo Element eingesetzt. Mit einem Linearen Potentiometer lässt sich die Geschwindigkeit der Explosion steuern und durch das drehbare Potentiometer verändert man den Farbton sowie die Grösse. Der Alpha Wert der ganzen Animation kann durch einen Lichtsensor beeinflusst werden. Je weniger Hell der Raum ist, desto geringer wird die Transparenz. FINAL PROJECT: Explosive Sponge Bob Video SCREENSHOTS VOM PROZESS:import processing.serial.*; Serial myPort; long lastTime = 0; int turner; int lighter = 0; int slider; int knocker; int colorsense; void setup() { size(600, 600); background(0); println(Serial.list()); // liste drucken und sehen, dass [1] "COM5" mein eingang ist // referenzt auf library: this // port: "COM5" oder Serial(Serial.list()[1] // geschwindingkeit mit welcher kommuniziert werden soll. gleicher wert wie im arduino myPort = new Serial(this, Serial.list()[1], 9600); } void draw() { noStroke(); background(0); delay(slider); for (int i= knocker-40; i>0; i--) { float xPos = ((width-turner-knocker*3)/2); float yPos = (xPos + turner+ knocker*3); int clr1 = (int)random(0, slider); int clr2 = (int)random(0, slider); int clr3 = (int)random(0, slider); float rand1=random(xPos, yPos); float rand2=random(xPos, yPos); float rand3=random(xPos, yPos); float rand4=random(xPos, yPos); float rand5=random(xPos, yPos); float rand6=random(xPos, yPos); rectMode(CENTER); noStroke(); colorMode(HSB, 1024); fill(turner, colorsense, 1024, lighter*4); beginShape(); vertex(rand1, rand2); vertex(rand3, rand4); vertex(rand5, rand6); endShape(CLOSE); lastTime = millis(); } if(knocker > 0) { knocker -=slider/2+10; } else { knocker = 0; } println(knocker); noStroke(); colorMode(RGB, 255); fill(0, 0, 0, knocker); rect(width/2, height/2, turner, turner); //(x,y) colorMode(HSB, 1024); fill(turner, colorsense, 1024, lighter*4); rect(width/2, height/2, turner, turner); //(x,y) } void serialEvent(Serial myPort) { if (myPort.available()>0) { String completeString = myPort.readStringUntil(10); // alle daten von der seriellen schnittstelle bis enter kommt. 10 entspricht enter aus arduino. kann ach so "\r" angegeben werden if (completeString != null) { trim(completeString); // leerzeichen und shizzl wird rausgenommen String separateValues[] = split(completeString, ","); // trennt an komma und schreibt einzelne werte in array turner = int(separateValues[0]); lighter = int(separateValues[1]); slider = int(separateValues[2]); colorsense = int(separateValues[4]); if(knocker < 150) { knocker = knocker+int(separateValues[3]); } else { knocker = knocker; } } } }