import processing.serial.*; Serial myPort; // Create object from Serial class String val; // Check if we've heard from the microcontroller boolean firstContact = false; // Lets us know when we've made contact w/Arduino PImage img; PShape triangle_hl; // head left PShape triangle_hr; // head right PShape triangle_nl; // neck left PShape triangle_nr; // neck right PShape triangle_tl; // tail left PShape triangle_tr; // tail right PShape triangle_el; // end left PShape triangle_er; // end right void setup(){ size(1300,700,P2D); String portName = Serial.list()[3]; //Change [] to match port myPort = new Serial(this, Serial.list()[3], 9600); myPort.bufferUntil('\n'); // store incoming information in buffer until we see carriage return (\n) img=loadImage("desktop/pleis.png"); noStroke(); background(255); image(img, 0, 0, width, height); //create the triangle as PATH type PShape triangle_hl = new PShape(PShape.PATH); //add it's vertices triangle_hl.vertex(1000,190); triangle_hl.vertex(1060,190); triangle_hl.vertex(1030,150); triangle_hr = new PShape(PShape.PATH); triangle_hr.vertex(1000,270); triangle_hr.vertex(1060,270); triangle_hr.vertex(1030,310); triangle_nl = new PShape(PShape.PATH); triangle_nl.vertex(800,280); triangle_nl.vertex(860,280); triangle_nl.vertex(830,240); triangle_nr = new PShape(PShape.PATH); triangle_nr.vertex(800,440); triangle_nr.vertex(860,440); triangle_nr.vertex(830,480); triangle_tl = new PShape(PShape.PATH); triangle_tl.vertex(240,210); triangle_tl.vertex(300,210); triangle_tl.vertex(270,170); triangle_tr = new PShape(PShape.PATH); triangle_tr.vertex(240,330); triangle_tr.vertex(300,330); triangle_tr.vertex(270,370); triangle_el = new PShape(PShape.PATH); triangle_el.vertex(100,180); triangle_el.vertex(160,180); triangle_el.vertex(130,140); triangle_er = new PShape(PShape.PATH); triangle_er.vertex(100,250); triangle_er.vertex(160,250); triangle_er.vertex(130,290); } void serialEvent( Serial myPort) { //put the incoming data into a String - //the '\n' is our end delimiter indicating the end of a complete packet val = myPort.readStringUntil('\n'); //make sure our data isn't empty before continuing if (val != null) { //trim whitespace and formatting characters (like carriage return) val = trim(val); println(val); //look for our 'A' string to start the handshake //if it's there, clear the buffer, and send a request for data if (firstContact == false) { if (val.equals("A")) { myPort.clear(); firstContact = true; myPort.write("A"); println("contact"); } } else { //if we've already established contact, keep getting and parsing data println(val); if(mousePressed && triangle_hl.contains(mouseX,mouseY)){ myPort.write('1'); println("head_left"); } if(mousePressed && triangle_hr.contains(mouseX,mouseY)){ myPort.write('2'); println("head_right"); } if(mousePressed && triangle_nl.contains(mouseX,mouseY)){ myPort.write('3'); println("neck_left"); } if(mousePressed && triangle_nr.contains(mouseX,mouseY)){ myPort.write('4'); println("neck_right"); } if(mousePressed && triangle_tl.contains(mouseX,mouseY)){ myPort.write('5'); println("tail_left"); } if(mousePressed && triangle_tr.contains(mouseX,mouseY)){ myPort.write('6'); println("tail_right"); } if(mousePressed && triangle_el.contains(mouseX,mouseY)){ myPort.write('7'); println("end_left"); } if(mousePressed && triangle_er.contains(mouseX,mouseY)){ myPort.write('8'); println("end_right"); }else{ } // when you've parsed the data you have, ask for more: myPort.write("A"); } } } void draw(){ background(255); image(img, 0, 0, width, height); //check if point is inside triangle fill(0); //render triangle accessing the vertices previously set beginShape(TRIANGLE); for(int i = 0 ; i < triangle_hl.getVertexCount(); i++){ PVector v = triangle_hl.getVertex(i); vertex(v.x,v.y); } endShape(CLOSE); beginShape(TRIANGLE); for(int i = 0 ; i < triangle_hr.getVertexCount(); i++){ PVector v = triangle_hr.getVertex(i); vertex(v.x,v.y); } endShape(CLOSE); beginShape(TRIANGLE); for(int i = 0 ; i < triangle_nl.getVertexCount(); i++){ PVector v = triangle_nl.getVertex(i); vertex(v.x,v.y); } endShape(CLOSE); beginShape(TRIANGLE); for(int i = 0 ; i < triangle_nr.getVertexCount(); i++){ PVector v = triangle_nr.getVertex(i); vertex(v.x,v.y); } endShape(CLOSE); beginShape(TRIANGLE); for(int i = 0 ; i < triangle_tl.getVertexCount(); i++){ PVector v = triangle_tl.getVertex(i); vertex(v.x,v.y); } endShape(CLOSE); beginShape(TRIANGLE); for(int i = 0 ; i < triangle_tr.getVertexCount(); i++){ PVector v = triangle_tr.getVertex(i); vertex(v.x,v.y); } endShape(CLOSE); beginShape(TRIANGLE); for(int i = 0 ; i < triangle_el.getVertexCount(); i++){ PVector v = triangle_el.getVertex(i); vertex(v.x,v.y); } endShape(CLOSE); beginShape(TRIANGLE); for(int i = 0 ; i < triangle_er.getVertexCount(); i++){ PVector v = triangle_er.getVertex(i); vertex(v.x,v.y); } endShape(CLOSE); }