Objective:
Arduino and Processing have numerous capabilities allowing them to connect to one another. Thus, this assignment presents these factors with three tasks my partner, Hamad, and I were instructed to follow.
Plan:
Go over what we touched upon in class and reference from numerous videos around the internet to explore the multiple ways possible to get to the goal desired.
Code:
Task 1:
ARDUINO & PROCESSING:
Task 2:
ARDUINO:
//INITIALIZE VARIABLE float var; //ARDUINO AND PROCESSING COMMUNICATION SETUP void setup() { Serial.begin(9600); //GET ONLY 1 INPUT - BRIGHTNESS Serial.println("0"); pinMode(2, OUTPUT); } //MAIN FUNCTION void loop() { while (Serial.available()) { //GET PROCESSING VARIABLE var = Serial.parseInt(); if (Serial.read() == '\n') { //GIVE LED BRIGHTNESS analogWrite(2, var); Serial.println(var); } } }
PROCESSING:
//LINK TO ARDUINO import processing.serial.*; Serial myPort; //INITIALIZE VARIABLES int xPos = 0; float var; void setup() { size(960, 720); printArray(Serial.list()); String portname=Serial.list()[0]; println(portname); myPort = new Serial(this, portname, 9600); myPort.clear(); myPort.bufferUntil('\n'); } void draw() { background(255); ellipse(xPos, height/2, 30, 30); //GET X POSITION float var1 = mouseX; //MAP WIDTH TO BRIGHTNESS var = map(var1, 0, width, 0, 255); } void serialEvent(Serial myPort) { String s=myPort.readStringUntil('\n'); s = trim(s); if (s != null) { println(s); int value = int(s); if (value >= 0) { xPos = (int)map(value, 0, 1023, 0, width); } } //SEND BACK MAPPED X VALUE TO ARDUINO myPort.write(var+ "\n"); }
Task 3:
ARDUINO:
//INITIALIZE VARIABLES int left = 0; int right = 0; int var = 0; //VARIBALES & LED SETUP void setup() { Serial.begin(9600); Serial.println("0,0"); pinMode(2, OUTPUT); } void loop() { while (Serial.available()) { //STORES LED VALUE FROM PROCESSING var = Serial.parseInt(); Serial.println(var); if (Serial.read() == '\n') { //TURN LED ON IF BALL TOUCHES GROUND if (var == 1) { digitalWrite(2, HIGH); } } //GET VALUES FROM POTENTIOMETER int sensor = analogRead(A0); delay(1); Serial.println(sensor); } }
PROCESSING:
//LINK PROCESSING TO ARDUINO import processing.serial.*; Serial myPort; //INITIALIZE VARIABLES PVector velocity; PVector gravity; PVector position; PVector acceleration; PVector wind; float drag = 0.99; float mass = 50; float hDampening; int potValue; //variable from the potentiometer int led = 0; //variable to change to switch the led off //REGULATIONS void setup() { 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); } //ARDUINO INTERACTION void draw() { background(255); if (!keyPressed) { //MOVE CIRCLE BASED ON POTENTIOMETER INPUT wind.x = potValue; 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 (position.y > height-mass/2) { velocity.y *= -0.9; position.y = height-mass/2; } } 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 (keyCode==LEFT) { wind.x=-1; } if (keyCode==RIGHT) { wind.x=1; } if (key==' ') { mass=random(15, 80); position.y=-mass; velocity.mult(0); } } void serialEvent(Serial myPort) { String s = myPort.readStringUntil('\n'); s=trim(s); if (s != null) { int value = int(s); potValue = (int)map(value, 0, 1023, 0, width*.01); } //TURN LED ON IF BALL TOUCHES GROUND if (round(velocity.y) < 0) { led = 1; myPort.write(int(led)+ "\n"); } }
VIDEO: (click)