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.

Explosive Sponge Bob

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