Here were the prompts we got for this week:
-
make something that uses only one sensor on Arduino and makes the ellipse in processing move on the horizontal axis, in the middle of the screen, and nothing on Arduino is controlled by processing
-
make something that controls the LED brightness from processing
-
take the gravity wind example (https://github.com/aaronsherwood/introduction_interactive_media/blob/master/processingExamples/gravityExamples/gravityWind/gravityWind.pde) and make it so every time the ball bounces one led lights up and then turns off, and you can control the wind from one analog sensor
Here’s the code for each:
Exercise 1:
Arduino sketch
void setup() { Serial.begin(9600); Serial.println("0,0"); } void loop() { while (Serial.available()) { if (Serial.read() == '\n') { int sensor = analogRead(A0); Serial.println(sensor); } } }
Processing sketch
import processing.serial.*; Serial myPort; int xPos=0; void setup(){ size(960,720); printArray(Serial.list()); String portname=Serial.list()[6]; 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"); }
Exercise 2:
Changes Brightness according to mouseX
Arduino sketch
int led = 0; int right = 0; void setup() { Serial.begin(9600); Serial.println("0,0"); pinMode(2, OUTPUT); pinMode(5, OUTPUT); } void loop() { while (Serial.available()) { led = Serial.parseInt(); //left = Serial.parseInt(); if (Serial.read() == '\n') { analogWrite(2, led); //digitalWrite(5, left); Serial.println(); } } }
Processing sketch
import processing.serial.*; Serial myPort; //int xPos=0; //int yPos=0; int onOff=0; //boolean onOff2=false; void setup(){ size(960,720); printArray(Serial.list()); String portname=Serial.list()[6]; println(portname); myPort = new Serial(this,portname,9600); myPort.clear(); myPort.bufferUntil('\n'); } void draw(){ background(255); //ellipse(xPos,yPos,30,30); onOff = mouseX; } void serialEvent(Serial myPort){ myPort.readStringUntil('\n'); int mappedValues=(int)map(onOff,0,width,0, 255); println(mouseX+" "+mappedValues); myPort.write(mappedValues+"\n"); }
Exercise 3:
Arduino sketch
int left = 0; int right = 0; int ledOn=0; void setup() { Serial.begin(9600); Serial.println("0,0"); pinMode(2, OUTPUT); } void loop() { while (Serial.available()) { ledOn = Serial.parseInt(); if (Serial.read() == '\n') { digitalWrite(2, ledOn); delay(2); int sensor = analogRead(A0); delay(1); Serial.println(sensor); } } }
Processing sketch
PVector velocity; PVector gravity; PVector position; PVector acceleration; PVector wind; float drag = 0.99; float mass = 50; float hDampening; import processing.serial.*; //serial library built-in Serial myPort; int bounce = 0; float oldPos = 0; int oldValue; void setup() { String portname=Serial.list()[6]; println(portname); myPort = new Serial(this, portname, 9600); myPort.clear(); //cleaning out serial buffer myPort.bufferUntil('\n'); //buffer /fill it up until \n size(960, 720); printArray(Serial.list()); //print out all the port that's available //find which one is your arduino that's the one port //this can change everytime - so recheck - check if it is the right port size(640,360); noFill(); 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() { bounce = 0; background(255); if (!keyPressed){ // wind.x=0; velocity.x*=hDampening; } applyForce(wind); applyForce(gravity); velocity.add(acceleration); velocity.mult(drag); position.add(velocity); acceleration.mult(0); ellipse(position.x,position.y,mass,mass); if ((int(position.y) >= height-mass/2) && (oldPos!=int(position.y))){ bounce = 1; } if (position.y > height-mass/2) { oldPos=int(position.y); velocity.y *= -0.9; // A little dampening when hitting the bottom position.y = height-mass/2; //bounce = 1; } // println("Y:"+position.y+" "+cond); } void applyForce(PVector force){ // Newton's 2nd law: F = M * A // or A = F / M PVector f = PVector.div(force, mass); acceleration.add(f); } void keyPressed(){ if (key==' '){ mass=random(15,80); position.y=-mass; velocity.mult(0); } } void serialEvent(Serial myPort) { myPort.write(bounce+"\n"); //send information to the arduino String s=myPort.readStringUntil('\n'); s=trim(s); if (s!=null){ int value=int(s); int mappedValues=(int)map(value,0,1023,0, width); // println(s); println(value+" "+oldValue); if ((mappedValues <= width/2)&&(value!=oldValue)){ wind.x=-1; } else if ((mappedValues > width/2)&&(value!=oldValue)){ wind.x=1; } else wind.x=0; oldValue = value; } }
Video demo