import processing.serial.*;
Serial myPort; // The serial port
int val = 10;
int valx = 0;
int valy = 0;
int valx_2 = 0;
int valy_2 = 0;
int pvalx = 0;
int pvaly = 0;
int on_off = 10;
int temp = 0;
int temp2 = 10;
float xmag, ymag = 0;
float newXmag, newYmag = 0;

void setup() {
size(640, 360, P3D);
stroke(0, 0, 0);
strokeWeight(0.1);
colorMode(RGB, 1);
// List all the available serial ports:
println(Serial.list());
// Open the port you are using at the rate you want:
myPort = new Serial(this, Serial.list()[5], 9600);
}

void draw() {
background(250, 250, 250);

while (myPort.available () > 0) {
String inBuffer = myPort.readString();
if (inBuffer != null) {
String M = inBuffer;
String[] M_list = split(M, '=');
temp2 = int(M_list[0]);
temp = int (inBuffer);
if (temp2 != 0 && temp != 1) {
val = temp2;
}
if (temp == 0 || temp == 1) {
on_off = temp;
}
println (val, "=", on_off);
}
}

if (val == 7) {
valx_2 = 50;
valy_2 = 50;
valx = 50;
valy = 50;
}
if (val == 5) {
valx_2 = 50;
valy_2 = 100;
valx = 150;
valy = 200;
}
if (val == 6) {
valx_2 = 50;
valy_2 = 150;
valx = 150;
valy = 250;
}
if (val == 3) {
valx_2 = 100;
valy_2 = 50;
valx = 100;
valy = 50;
}
if (val == 4) {
valx_2 = 100;
valy_2 = 100;
valx = 200;
valy = 200;
valy = 250;
}
if (val == 8) {
valx_2 = 150;
valy_2 = 100;
valx = 250;
valy = 200;
}
if (val == 2) {
valx_2 = 150;
valy_2 = 50;
valx = 250;
valy = 150;
}
if (val == 9) {
valx_2 = 150;
valy_2 = 150;
valx = 250;
valy = 150;
}
fill(0, 0, 0);
ellipse(valx_2, valy_2, 25, 25);

if (val == 4) {
ellipse(100, 150, 25, 25);
}
smooth(8);

pushMatrix();
translate(width/2, height/2, -30);

newXmag = valx/float(width) * TWO_PI;
newYmag = valy/float(height) * TWO_PI;

float diff = xmag-newXmag;
if (abs(diff) > 0.01) {
xmag -= diff/4.0;
}

diff = ymag-newYmag;
if (abs(diff) > 0.01) {
ymag -= diff/4.0;
}

rotateX(-ymag);
rotateY(-xmag);

scale(80);
beginShape(QUADS);

if (on_off==1) {
fill(255, 0, 0);
vertex(-1, 1, 1);
fill(255, 0, 0);
vertex( 1, 1, 1);
fill(255, 0, 0);
vertex( 1, -1, 1);
fill(255, 0, 0);
vertex(-1, -1, 1);

fill(255, 0, 0);
vertex( 1, 1, 1);
fill(255, 0, 0);
vertex( 1, 1, -1);
fill(255, 0, 0);
vertex( 1, -1, -1);
fill(255, 0, 0);
vertex( 1, -1, 1);

fill(255, 0, 0);
vertex( 1, 1, -1);
fill(255, 0, 0);
vertex(-1, 1, -1);
fill(255, 0, 0);
vertex(-1, -1, -1);
fill(255, 0, 0);
vertex( 1, -1, -1);

fill(255, 0, 0);
vertex(-1, 1, -1);
fill(255, 0, 0);
vertex(-1, 1, 1);
fill(255, 0, 0);
vertex(-1, -1, 1);
fill(255, 0, 0);
vertex(-1, -1, -1);

fill(255, 0, 0);
vertex(-1, 1, -1);
fill(255, 0, 0);
vertex( 1, 1, -1);
fill(255, 0, 0);
vertex( 1, 1, 1);
fill(255, 0, 0);
vertex(-1, 1, 1);

fill(255, 0, 0);
vertex(-1, -1, -1);
fill(255, 0, 0);
vertex( 1, -1, -1);
fill(255, 0, 0);
vertex( 1, -1, 1);
fill(255, 0, 0);
vertex(-1, -1, 1);
}
if (on_off==0) {
fill(250, 250, 250);
vertex(-1, 1, 1);
fill(250, 250, 250);
vertex( 1, 1, 1);
fill(250, 250, 250);
vertex( 1, -1, 1);
fill(250, 250, 250);
vertex(-1, -1, 1);

fill(250, 250, 250);
vertex( 1, 1, 1);
fill(250, 250, 250);
vertex( 1, 1, -1);
fill(250, 250, 250);
vertex( 1, -1, -1);
fill(250, 250, 250);
vertex( 1, -1, 1);

fill(250, 250, 250);
vertex( 1, 1, -1);
fill(250, 250, 250);
vertex(-1, 1, -1);
fill(250, 250, 250);
vertex(-1, -1, -1);
fill(250, 250, 250);
vertex( 1, -1, -1);

fill(250, 250, 250);
vertex(-1, 1, -1);
fill(250, 250, 250);
vertex(-1, 1, 1);
fill(250, 250, 250);
vertex(-1, -1, 1);
fill(250, 250, 250);
vertex(-1, -1, -1);

fill(250, 250, 250);
vertex(-1, 1, -1);
fill(250, 250, 250);
vertex( 1, 1, -1);
fill(250, 250, 250);
vertex( 1, 1, 1);
fill(250, 250, 250);
vertex(-1, 1, 1);

fill(250, 250, 250);
vertex(-1, -1, -1);
fill(250, 250, 250);
vertex( 1, -1, -1);
fill(250, 250, 250);
vertex( 1, -1, 1);
fill(250, 250, 250);
vertex(-1, -1, 1);
}

endShape();

popMatrix();
}