import pitaru.sonia_v2_9.*; import processing.serial.*; //int bgcolor; // Background color //int fgcolor; // Fill color Serial port; // The serial port int[] serialInArray = new int[2]; // Where we'll put what we receive int serialCount = 0; // A count of how many bytes we receive int xpos, ypos; // Starting position of the ball boolean firstContact = false; // Whether we've heard from the microcontroller Sample fun; // Sound Sample gloom; // Sound void setup() { size(600,600); // Stage size noStroke(); // No border on the next thing drawn // Set the starting position of the ball (middle of the stage) xpos = width/2; ypos = height/2; // Print a list of the serial ports, for debugging purposes: println(Serial.list()); // I know that the first port in the serial list on my mac // is always my Keyspan adaptor, so I open Serial.list()[0]. // On Windows machines, this generally opens COM1. // Open whatever port is the one you're using. port = new Serial(this, Serial.list()[0], 9600); port.write(65); // Send a capital A to start the microcontroller sending Sonia.start(this); // Start Sonia engine. // create a new sample object. fun = new Sample("fun.aif"); fun.setVolume(.01); fun.repeat(); // create a new sample object. gloom = new Sample("gloom.wav"); gloom.setVolume(.01); gloom.repeat(); } void draw() { background(xpos,0,0); noStroke(); //draw happy n angry fill(153,0,0); triangle(118,103,146,53-(xpos/2),174,103); triangle(61-(xpos/2),114,101,155,118,102); triangle(101,155,95-(xpos/2),214+(xpos/2),146,188); triangle(146,188,191,156,199+(xpos/2),214+(xpos/2)); triangle(191,156,231+(xpos/2),114,174,103); fill(200-(xpos/2),0,0); triangle(118,103,146,53-(xpos/8),174,103); triangle(61-(xpos/8),114,101,155,118,102); triangle(101,155,95-(xpos/8),214+(xpos/8),146,188); triangle(146,188,191,156,199+(xpos/8),214+(xpos/8)); triangle(191,156,231+(xpos/8),114,174,103); rectMode(CENTER); rect(0,0,300-xpos,300-xpos); rect(300,0,300-xpos,300-xpos); rect(0,300,300-xpos,300-xpos); rect(300,300,300-xpos,300-xpos); //draw happy n angry fill(153,0,0); triangle(118+300,103,146+300,53-(xpos/2),174+300,103); triangle(61-(xpos/2)+300,114,101+300,155,118+300,102); triangle(101+300,155,95-(xpos/2)+300,214+(xpos/2),146+300,188); triangle(146+300,188,191+300,156,199+(xpos/2)+300,214+(xpos/2)); triangle(191+300,156,231+(xpos/2)+300,114,174+300,103); fill(200-(xpos/2),0,0); triangle(118+300,103,146+300,53-(xpos/8),174+300,103); triangle(61-(xpos/8)+300,114,101+300,155,118+300,102); triangle(101+300,155,95-(xpos/8)+300,214+(xpos/8),146+300,188); triangle(146+300,188,191+300,156,199+(xpos/8)+300,214+(xpos/8)); triangle(191+300,156,231+(xpos/8)+300,114,174+300,103); rectMode(CENTER); rect(0+300,0,300-xpos,300-xpos); rect(300+300,0,300-xpos,300-xpos); rect(0+300,300,300-xpos,300-xpos); rect(300+300,300,300-xpos,300-xpos); //draw happy n angry fill(153,0,0); triangle(118,103+300,146,53-(xpos/2)+300,174,103+300); triangle(61-(xpos/2),114+300,101,155+300,118,102+300); triangle(101,155+300,95-(xpos/2),214+(xpos/2)+300,146,188+300); triangle(146,188+300,191,156+300,199+(xpos/2),214+(xpos/2)+300); triangle(191,156+300,231+(xpos/2),114+300,174,103+300); fill(200-(xpos/2),0,0); triangle(118,103+300,146,53-(xpos/8)+300,174,103+300); triangle(61-(xpos/8),114+300,101,155+300,118,102+300); triangle(101,155+300,95-(xpos/8),214+(xpos/8)+300,146,188+300); triangle(146,188+300,191,156+300,199+(xpos/8),214+(xpos/8)+300); triangle(191,156+300,231+(xpos/8),114+300,174,103+300); rectMode(CENTER); rect(0,0+300,300-xpos,300-xpos); rect(300,0+300,300-xpos,300-xpos); rect(0,300+300,300-xpos,300-xpos); rect(300,300+300,300-xpos,300-xpos); //draw happy n angry fill(153,0,0); triangle(118+300,103+300,146+300,53-(xpos/2)+300,174+300,103+300); triangle(61-(xpos/2)+300,114+300,101+300,155+300,118+300,102+300); triangle(101+300,155+300,95-(xpos/2)+300,214+(xpos/2)+300,146+300,188+300); triangle(146+300,188+300,191+300,156+300,199+(xpos/2)+300,214+(xpos/2)+300); triangle(191+300,156+300,231+(xpos/2)+300,114+300,174+300,103+300); fill(200-(xpos/2),0,0); triangle(118+300,103+300,146+300,53-(xpos/8)+300,174+300,103+300); triangle(61-(xpos/8)+300,114+300,101+300,155+300,118+300,102+300); triangle(101+300,155+300,95-(xpos/8)+300,214+(xpos/8)+300,146+300,188+300); triangle(146+300,188+300,191+300,156+300,199+(xpos/8)+300,214+(xpos/8)+300); triangle(191+300,156+300,231+(xpos/8)+300,114+300,174+300,103+300); rectMode(CENTER); rect(0+300,0+300,300-xpos,300-xpos); rect(300+300,0+300,300-xpos,300-xpos); rect(0+300,300+300,300-xpos,300-xpos); rect(300+300,300+300,300-xpos,300-xpos); noStroke(); fill(255,204-xpos,0-xpos); ellipseMode(CENTER); ellipse(150, 150, 320-xpos, 320-xpos); fill(255,255-xpos,153-xpos); ellipse(50, 50, 150-(xpos/2), 150-(xpos/2)); ellipse(250, 50, 150-(xpos/2), 150-(xpos/2)); ellipse(50, 250, 150-(xpos/2), 150-(xpos/2)); ellipse(250, 250, 150-(xpos/2), 150-(xpos/2)); ellipse(150, 150, 150-(xpos/2), 150-(xpos/2)); fill(255,255-xpos,255-xpos); ellipse(50, 50, 80-(xpos/2), 80-(xpos/2)); ellipse(250, 50, 80-(xpos/2), 80-(xpos/2)); ellipse(50, 250, 80-(xpos/2), 80-(xpos/2)); ellipse(250, 250, 80-(xpos/2), 80-(xpos/2)); ellipse(150, 150, 80-(xpos/2), 80-(xpos/2)); noStroke(); fill(255,204-xpos,0-xpos); ellipseMode(CENTER); ellipse(150+300, 150, 320-xpos, 320-xpos); fill(255,255-xpos,153-xpos); ellipse(50+300, 50, 150-(xpos/2), 150-(xpos/2)); ellipse(250+300, 50, 150-(xpos/2), 150-(xpos/2)); ellipse(50+300, 250, 150-(xpos/2), 150-(xpos/2)); ellipse(250+300, 250, 150-(xpos/2), 150-(xpos/2)); ellipse(150+300, 150, 150-(xpos/2), 150-(xpos/2)); fill(255,255-xpos,255-xpos); ellipse(50+300, 50, 80-(xpos/2), 80-(xpos/2)); ellipse(250+300, 50, 80-(xpos/2), 80-(xpos/2)); ellipse(50+300, 250, 80-(xpos/2), 80-(xpos/2)); ellipse(250+300, 250, 80-(xpos/2), 80-(xpos/2)); ellipse(150+300, 150, 80-(xpos/2), 80-(xpos/2)); noStroke(); fill(255,204-xpos,0-xpos); ellipseMode(CENTER); ellipse(150, 150+300, 320-xpos, 320-xpos); fill(255,255-xpos,153-xpos); ellipse(50, 50+300, 150-(xpos/2), 150-(xpos/2)); ellipse(250, 50+300, 150-(xpos/2), 150-(xpos/2)); ellipse(50, 250+300, 150-(xpos/2), 150-(xpos/2)); ellipse(250, 250+300, 150-(xpos/2), 150-(xpos/2)); ellipse(150, 150+300, 150-(xpos/2), 150-(xpos/2)); fill(255,255-xpos,255-xpos); ellipse(50, 50+300, 80-(xpos/2), 80-(xpos/2)); ellipse(250, 50+300, 80-(xpos/2), 80-(xpos/2)); ellipse(50, 250+300, 80-(xpos/2), 80-(xpos/2)); ellipse(250, 250+300, 80-(xpos/2), 80-(xpos/2)); ellipse(150, 150+300, 80-(xpos/2), 80-(xpos/2)); noStroke(); fill(255,204-xpos,0-xpos); ellipseMode(CENTER); ellipse(150+300, 150+300, 320-xpos, 320-xpos); fill(255,255-xpos,153-xpos); ellipse(50+300, 50+300, 150-(xpos/2), 150-(xpos/2)); ellipse(250+300, 50+300, 150-(xpos/2), 150-(xpos/2)); ellipse(50+300, 250+300, 150-(xpos/2), 150-(xpos/2)); ellipse(250+300, 250+300, 150-(xpos/2), 150-(xpos/2)); ellipse(150+300, 150+300, 150-(xpos/2), 150-(xpos/2)); fill(255,255-xpos,255-xpos); ellipse(50+300, 50+300, 80-(xpos/2), 80-(xpos/2)); ellipse(250+300, 50+300, 80-(xpos/2), 80-(xpos/2)); ellipse(50+300, 250+300, 80-(xpos/2), 80-(xpos/2)); ellipse(250+300, 250+300, 80-(xpos/2), 80-(xpos/2)); ellipse(150+300, 150+300, 80-(xpos/2), 80-(xpos/2)); // If no serial data has beeen received, send again until we get some. // (in case you tend to start Processing before you start your // external device): if (firstContact == false) { delay(300); port.write(65); } fun.setVolume((255-ypos)/100); gloom.setVolume(1-((255-ypos)/100)); } void serialEvent(Serial port) { // if this is the first byte received, // take note of that fact: if (firstContact == false) { firstContact = true; } // Add the latest byte from the serial port to array: serialInArray[serialCount] = port.read(); serialCount++; // If we have 3 bytes: if (serialCount > 1 ) { xpos = serialInArray[0]; ypos = serialInArray[1]; //fgcolor = serialInArray[2]; // print the values (for debugging purposes only): //println(xpos + "\t" + ypos; println(xpos + "\t" + ypos); // Send a capital A to request new sensor readings: port.write(65); // Reset serialCount: serialCount = 0; } } // Safely close the sound engine upon Browser shutdown. public void stop(){ Sonia.stop(); super.stop(); }