Exercise 1:
Processing:
import processing.serial.*; Serial myPort; int xPos=0; void setup(){ size(960,720); printArray(Serial.list()); String portname=Serial.list()[4]; println(portname); myPort = new Serial(this,portname,9600); myPort.clear(); myPort.bufferUntil('\n'); } void draw(){ background(255); ellipse(xPos,height/2,30,30); } void serialEvent(Serial myPort){ String s=myPort.readStringUntil('\n'); s=trim(s); if (s!=null){ println(s); int values=int(s); if (values >= 0){ xPos=(int)map(values,0,1023,0, width); } } myPort.write("\n"); }
Arduino:
void setup() { Serial.begin(9600); Serial.println("0,0"); } void loop() { while (Serial.available()) { if (Serial.read() == '\n') { int sensor = analogRead(A0); delay(1); Serial.println(sensor); } } }
Exercise 2:
Processing:
import processing.serial.*; Serial myPort; //int xPos=0; //int yPos=0; boolean onOff=false; boolean onOff2=false; void setup(){ size(960,720); printArray(Serial.list()); String portname=Serial.list()[4]; println(portname); myPort = new Serial(this,portname,9600); myPort.clear(); myPort.bufferUntil('\n'); } void draw(){ background(255); //ellipse(xPos,yPos,30,30); if (mousePressed){ if(mouseX<=width/2) onOff2=true; else onOff=true; }else{ onOff=onOff2=false; } } void serialEvent(Serial myPort){ String s=myPort.readStringUntil('\n'); s=trim(s); if (s!=null){ println(s); int values[]=int(split(s,',')); if (values.length==1){ //xPos=(int)map(values[0],0,1023,0, width); //yPos=(int)map(values[1],0,1023,0, height); } } myPort.write(int(onOff)+","+int(onOff2)+"\n"); }
Arduino:
int left = 0; int right = 0; void setup() { Serial.begin(9600); Serial.println("0,0"); pinMode(2, OUTPUT); pinMode(5, OUTPUT); } void loop() { while (Serial.available()) { right = Serial.parseInt(); left = Serial.parseInt(); if (Serial.read() == '\n') { digitalWrite(2, right); digitalWrite(5, left); Serial.println(); } } }
Exercise 3:
Processing:
import processing.serial.*; Serial myPort; boolean onOff=false; boolean onOff2=false; PVector velocity; PVector gravity; PVector position; PVector acceleration; PVector wind; float drag = 0.99; float mass = 50; float hDampening; void setup(){ delay(1000); size(960,720); printArray(Serial.list()); String portname=Serial.list()[4]; println(portname); myPort = new Serial(this,portname,9600); myPort.clear(); myPort.bufferUntil('\n'); position = new PVector(width/2, 0); velocity = new PVector(0,0); acceleration = new PVector(0,0); gravity = new PVector(0, 0.5*mass); wind = new PVector(0,0); hDampening=map(mass,15,80,.98,.96); delay(1000); } void draw(){ background(255); applyForce(wind); applyForce(gravity); velocity.add(acceleration); velocity.mult(drag); position.add(velocity); acceleration.mult(0); ellipse(position.x,position.y,mass,mass); if (position.y > height-mass/2) { velocity.y *= -0.9; // A little dampening when hitting the bottom position.y = height-mass/2; onOff = true; println("BOUNCE!!!!"); }else{ onOff = false; } } void serialEvent(Serial myPort){ String s=myPort.readStringUntil('\n'); s=trim(s); if (s!=null){ println(s); int values[]=int(split(s,',')); if (values.length==2){ int mappedValues=(int)map(values[0],0,1023,0, width); if (mappedValues <= width/2){ wind.x=-1; } if (mappedValues > width/2){ wind.x=1; } } myPort.write(int(onOff)+","+int(onOff2)+"\n"); println("OnOFF"+onOff); } } void applyForce(PVector force){ PVector f = PVector.div(force, mass); acceleration.add(f); } void keyPressed(){ if (key==' '){ mass=random(15,80); position.y=-mass; velocity.mult(0); } }
Arduino:
int left = 0; int right = 0; void setup() { Serial.begin(9600); Serial.println("0,0"); pinMode(2, OUTPUT); pinMode(5, OUTPUT); } void loop() { while (Serial.available()) { right = Serial.parseInt(); left = Serial.parseInt(); if (Serial.read() == '\n') { digitalWrite(2, right); digitalWrite(5, left); delay(2); int sensor = analogRead(A0); delay(1); int sensor2 = analogRead(A1); delay(1); Serial.print(sensor); Serial.print(','); Serial.println(sensor2); } } }
Video: