Class Assignment: Arduino-Processing Communication

Exercise 1:

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()[0];
  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==2){
      xPos=(int)map(values[0],0,1023,0, width);
      yPos=height/2;
    }
  }
  myPort.write(int(onOff)+","+int(onOff2)+"\n");
}
Arduino:
int left = 0;
int right = 0;

void setup() {
  Serial.begin(9600);
  Serial.println("0,0");
  pinMode(3, OUTPUT);
  pinMode(5, OUTPUT);
}

void loop() {
  while (Serial.available()) {
    right = Serial.parseInt();
    left = Serial.parseInt();
    if (Serial.read() == '\n') {
      digitalWrite(3, right);
      digitalWrite(5, left);
      int sensor = analogRead(A0);
      delay(1);
      int sensor2 = analogRead(A1);
      delay(1);
      Serial.print(sensor);
      Serial.print(',');
      Serial.println(sensor2);
    }
  }
}

 

 

Exercise 2:

Processing:
import processing.serial.*;
Serial myPort;
int xPos = 0;
int yPos = 0;
int onOff = 0;
int onOff2 = 0;
int brightness = 0;

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);
  brightness = int(map(mouseY, 0, height, 0, 255));
  ellipse(xPos, yPos, 30, 30);
  if (mousePressed) {
    if (mouseX <= width / 2) {
      onOff2 = brightness;
    } else {
      onOff = brightness;
    }
  } else {
    onOff = onOff2 = 0;
  }
}

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) {
      xPos = (int)map(values[0], 0, 1023, 0, width);
      //yPos=(int)map(values[1],0,1023,0, height);
      yPos = mouseY;
    }
  }
  myPort.write(int(onOff) + "," + int(onOff2) + "\n");
}
Arduino:
int left = 0;
int right = 0;

void setup() {
  Serial.begin(9600);
  Serial.println("0,0");
  pinMode(3, OUTPUT);
  pinMode(5, OUTPUT);
}

void loop() {
  while (Serial.available()) {
    right = Serial.parseInt();
    left = Serial.parseInt();
    if (Serial.read() == '\n') {
      analogWrite(3, right);
      analogWrite(5, left);
      int sensor = analogRead(A0);
      delay(1);
      int sensor2 = analogRead(A1);
      delay(1);
      Serial.print(sensor);
      Serial.print(',');
      Serial.println(sensor2);
    }
  }
}

 

Exercise 3:

Processing:
import processing.serial.*;
Serial myPort;

PVector velocity;
PVector gravity;
PVector position;
PVector acceleration;
PVector wind;
float drag = 0.99;
float mass = 50;
float hDampening;
int[] values;

int onoff, onoff2;

void setup() {
  size(960, 720);
  printArray(Serial.list());

  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);


  String portname=Serial.list()[0];
  println(portname);
  myPort = new Serial(this, portname, 9600);
  myPort.clear();
  myPort.bufferUntil('\n');
}

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;
  }

  if (velocity.y!=0) {
    onoff=1;
    onoff2=0;
  } else {
    onoff=0;
    onoff2=1;
  }
}

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 serialEvent(Serial myPort) {
  String s=myPort.readStringUntil('\n');
  s=trim(s);
  if (s!=null) {
    println(s);
    values=int(split(s, ','));
    if (values.length==3) {
      if (values[0]==1) {
        wind.x=-2;
      }
      if (values[1]==1) {
        wind.x=2;
      }
      if (values[2]==1) {
        mass=random(15, 80);
        position.y=-mass;
        velocity.mult(0);
      }
      if (values[0]==0 && values[1]==0) {
        wind.x=0;
        velocity.x*=hDampening;
      }
    }
  }
  myPort.write(onoff+ ","+onoff2+"\n");
}

Arduino:
int left = 0;
int right = 0;

void setup() {
  Serial.begin(9600);
  Serial.println("0,0,0");
  pinMode(3, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(A0, INPUT);
  pinMode(A1, INPUT);
  pinMode(A2, INPUT);
}

void loop() {
  while (Serial.available()) {
    right = Serial.parseInt();
    left = Serial.parseInt();
    if (Serial.read() == '\n') {
      digitalWrite(3, right);
      digitalWrite(5, left);
      int button = digitalRead(A0);
      delay(1);
      int button2 = digitalRead(A1);
      delay(1);
      int button3 = digitalRead(A2);
      delay(1);
      Serial.print(button);
      Serial.print(',');
      Serial.print(button2);
      Serial.print(',');
      Serial.println(button3);
    }
  }
}

Week 11: Exercises

Exercise 1:
Arduino
void setup() {
  Serial.begin(9600);
  Serial.println("0");
}

void loop() {
  while (Serial.available()) {
    if (Serial.read() == '\n') {
      int sensor = analogRead(A0);
      Serial.println(sensor);
    }
  }
}
Processing
import processing.serial.*;
Serial myPort;
int xPos=0;
int yPos=0;

void setup(){
  size(960,720);
  printArray(Serial.list());
  String portname=Serial.list()[1];
  println(portname);
  myPort = new Serial(this,portname,9600);
  myPort.clear();
  myPort.bufferUntil('\n');
}

void draw(){
  background(255);
  ellipse(xPos,yPos,30,30);
}

void serialEvent(Serial myPort){
  String s=myPort.readStringUntil('\n');
  s=trim(s);
  if (s!=null){
    int value= int(s);
    xPos=(int)map(value,0,1023,0, width);
    yPos=height/2;
  }
  myPort.write("\n");
}
Exercise 2:
Arduino
void setup() {
  Serial.begin(9600);
  Serial.println("0");
  pinMode(3, OUTPUT);
}

void loop() {
  while (Serial.available()) {
    int right=Serial.parseInt();
    analogWrite(3,right);
  }
}
Processing
import processing.serial.*;
Serial myPort;
int brightness;

void setup(){
  size(960,720);
  printArray(Serial.list());
  String portname=Serial.list()[1];
  println(portname);
  myPort = new Serial(this,portname,9600);
  myPort.clear();
  myPort.bufferUntil('\n');
}

void draw(){
  background(255);
  brightness=int(map(mouseX,0,width,0,255));
  myPort.write(brightness+"\n");
}
Exercise 3:
Arduino
void setup() {
  Serial.begin(9600);
  Serial.println("0");
  pinMode(3, OUTPUT);
}
void loop() {
  while (Serial.available()) {
    int right = Serial.parseInt();
    if (Serial.read() == '\n') {
      digitalWrite(3, right);
      int sensor = analogRead(A0);
      Serial.println(sensor);
    }
  }
}
Processing
import processing.serial.*;
Serial myPort; 
int light;
int pos;
int value=0;
float previous;

PVector velocity;
PVector gravity;
PVector position;
PVector acceleration;
PVector wind;
float drag = 0.99;
float mass = 50;
float hDampening;

void setup() {
  size(640, 360);
  noFill();
  printArray(Serial.list());
  String portname=Serial.list()[1]; 
  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);
}

void draw() {
  background(255);
  previous=position.y;
  if (!keyPressed){
    wind.x=map(value,0,1023,-1, 1); // Add the wind
    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;  // A little dampening when hitting the bottom
      position.y = height-mass/2;
   }
  // check when it touches the bottom
  if (position.y >= height-mass/2) {
      light= int(true); // turn led on
  }
  else {
    light= int(false); // turn led off
  }
  // compare previous position to the current one (check if it stopped bouncing)
  if (previous==position.y){light= int(false);}
}

void serialEvent(Serial myPort){
  String s = myPort.readStringUntil('\n');
  s=trim(s);
  if (s!=null){
    value = parseInt(s);
    //wind.x = map(value,0,1023,-1, 1);
  }
  myPort.write(light+"\n");
}
  
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);
  }
}

 

View post on imgur.com

In-class Exercises

Here were the prompts we got for this week:

  1. 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
  2. make something that controls the LED brightness from processing
  3. 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

Serial Communication Exercises – Shamma & Theyab documentation

EXERCISE 1 :

Procedure – The sensor on the Arduino Is the LDR, light depending on resistor. So, once the value from the LDR Arduino is less than 200, the ellipse will move by adding 1 to the Xposition.

Challenges- The difficulty was in working using both processing and Arduino together to be able to read from Arduino and control processing ellipse. By using myport to create an object from serial reading in processing , the problem was solved.

PROCESSING CODE :

import processing.serial.*;
int xPos=0;
int yPos=100;
Serial myPort;  // Create object from Serial class
int val;      // Data received from the serial port

void setup(){
  size(200, 200); 
  String portname=Serial.list()[3];
  myPort = new Serial(this, portname, 9600);
  println(portname);
}
void draw()
{background(255);
  ellipse(xPos,yPos,30,30);
  
  if ( myPort.available() > 0) {  // If data is available,
 
   val = myPort.read();         // read it and store it in val
  }
  if (val == 0) {              // If the serial value is 0,
    fill(0);                   // set fill to black
  } 
  else {                       // If the serial value is not 0,
    fill(204);  xPos++;               // set fill to light gray
  }
  ellipse(xPos,yPos,30,30);
}

ARDUINO CODE :

void setup() {
  Serial.begin(9600);

}

void loop() {
      int sensor = analogRead(A0);
      delay(1);
 
      //Serial.println(sensor);
      //Serial.write(sensor);
        if (sensor <200)
 {  
    Serial.write(1);               // send 1 to Processing
  } else {           
    Serial.write(0);               // send 0 to Processing
  }
    delay(100);
    }

OUTPUT :

EXERCISE 2 :

Procedure – The program is to show two rectangles on processing screen. If the mouse is over the first square on the left, the brightness of the light is increased by 1 and if the mouse is over the second square, the brightness is less by 1. The analogWrite(ledPin,i) is the command used for controlling the brightness of the led.

Challenges- The hardship was to connect the serial to write to the Arduino. By creating 2 different rectangles, we had two options for increasing and decreasing the brightness of the light.

PROCESSING CODE :

import processing.serial.*;

Serial myPort;  // Create object from Serial class
int val;        // Data received from the serial port

void setup() 
{
  size(200, 200);
  String portName = Serial.list()[3];
  myPort = new Serial(this, portName, 9600);
  print(portName);
}

void draw() {
  background(255);
  if (mouseOverRect1() == true) {  // If mouse is over square,
    fill(204);                    // change color and
    myPort.write('H');              // send an H to indicate mouse is over square
  } 
  else {                        // If mouse is not over square,
    fill(0);                      // change color and
    //myPort.write('L');              // send an L otherwise
  
  if (mouseOverRect2() == true) {  // If mouse is over square,
    fill(204);                    // change color and
    myPort.write('L');              // send an H to indicate mouse is over square
  } 
  else {                        // If mouse is not over square,
    fill(0);                      // change color and
    //myPort.write('N');              // send an L otherwise
  }}
  rect(20, 20, 50, 100);         // Draw a square
  rect(90, 20, 50, 100);
}

boolean mouseOverRect1() { // Test if mouse is over square
  return ((mouseX >= 30) && (mouseX <= 70) && (mouseY >= 20) && (mouseY <= 120));
}
boolean mouseOverRect2() { // Test if mouse is over square
  return ((mouseX >= 90) && (mouseX <= 140) && (mouseY >= 20) && (mouseY <= 120));
}

ARDUINO CODE :

char val; // Data received from the serial port

int ledPin = 13; // Set the pin to digital I/O 4

int i = 10;

void setup() {

pinMode(ledPin, OUTPUT); // Set pin as OUTPUT

Serial.begin(9600); // Start serial communication at 9600 bps

}

 void loop() {

while (Serial.available()) { // If data is available to read,

val = Serial.read(); // read it and store it in val

if (val == 'H') { // If H was received
i++;
analogWrite(ledPin,i);

}
else if (val == 'L'){
i--;
analogWrite(ledPin,i); // Otherwise turn it OFF


}

delay(100); // Wait 100 milliseconds for next reading
}
}

OUTPUT :

EXERCISE 3 :

Procedure – The analog sensor used is the potentiometer on A1 analog port 1. If the value is less than 1024/2, the wind is blowing to the right. If the value is higher, then the wind is blowing to the left. Thus, the light turns on when the ball is bouncing.

Challenges- The challenge is to turn on the LED to have it on during the bouncing of the ball on processing screen. The second challenge was to use one analog sensor to make right and left movement, so our solution was to use a potentiometer that reads values from 0 to 1023. The mid value is the threshold, if under 1023/2, it moves to the right side, and if higher, moves to left side

PROCESSING CODE :

import processing.serial.*;

Serial myPort;  // Create object from Serial class
int val;  
PVector velocity;
PVector gravity;
PVector position;
PVector acceleration;
PVector wind;
float drag = 0.99;
float mass = 50;
float hDampening;

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);
  String portName = Serial.list()[3];
  myPort = new Serial(this, portName, 9600);
}

void draw() {
  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 (position.y > height-mass/2) {
      velocity.y *= -0.9;  // A little dampening when hitting the bottom
      position.y = height-mass/2;
      myPort.write('L');
    } 
    else myPort.write('H');
    
  if ( myPort.available() > 0) {  // If data is available,
    val = myPort.read();         // read it and store it in val
  }
    
     if(val==0){
    wind.x=-1;
  }
 
   else{
    wind.x=1;
  }
}
  
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);
  }
}

ARDUINO CODE :

char val; // Data received from the serial port

int ledPin = 13; // Set the pin to digital I/O 4

int i = 50;
int left = 0;
int right = 0;
int rightbool=0;
void setup() {

pinMode(ledPin, OUTPUT); // Set pin as OUTPUT

Serial.begin(9600); // Start serial communication at 9600 bps

}

 void loop() {

while (Serial.available()) { // If data is available to read,

val = Serial.read(); // read it and store it in val

}

if (val == 'H') { // If H was received

digitalWrite(ledPin,HIGH);

} else {

digitalWrite(ledPin,LOW); // Otherwise turn it OFF

}
int sensor = analogRead(A1);
//Serial.println(sensor);
if(sensor<511){rightbool=1; Serial.write(1);}
else {rightbool=0;Serial.write(0);}

delay(100); // Wait 100 milliseconds for next reading

}

CIRCUIT DIAGRAM:

FINAL VIDEO :

Week 11: Communication Exercise

DESCRIPTION: 

  1. 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
  2. make something that controls the LED brightness from processing
  3. take the gravity wind example

GIVEN CODE: 

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);
      int sensor = analogRead(A0);
      delay(1);
      int sensor2 = analogRead(A1);
      delay(1);
      Serial.print(sensor);
      Serial.print(',');
      Serial.println(sensor2);
    }
  }
}

/*

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()[1];
  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==2){
      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");
}

 */

EXERCISE 1: 

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);
     int sensor = analogRead(A0);
     delay(1);
     int sensor2 = analogRead(A1);
     delay(1);
     Serial.print(sensor);
     Serial.print(',');
     Serial.println(sensor2);
   }
 }
}


//////////////////////////////////////////////////////

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,height/2,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==2){
     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");
}

EXERCISE 2: 

import processing.serial.*;
Serial myPort;
//int xPos=0;
int yPos=0;
float brightness;
//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(width/2,mouseY,30,30);
 brightness = map(mouseY,0,height,0,255);
 myPort.write(int(brightness)+ "\n"); 
 //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==2){
//    //  //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");

//}


//////////////////////////////////////////////

//int left = 0;
//int right = 0;
int brightness;

void setup() {
 Serial.begin(9600);
 Serial.println("0");
 pinMode(3, OUTPUT);
 //  pinMode(5, OUTPUT);
}

void loop() {
 while (Serial.available()) {
   brightness = Serial.parseInt();
   //left = Serial.parseInt();
   if (Serial.read() == '\n') {
     analogWrite(3, brightness);
     //digitalWrite(5, left);
     //      int sensor = analogRead(A0);
     //      delay(1);
     //      int sensor2 = analogRead(A1);
     //      delay(1);
     //      Serial.print(sensor);
     //      Serial.print(',');
     //      Serial.println(sensor2);
   }
 }
}

EXERCISE 3

int onoff;
void setup() {
  Serial.begin(9600);
  Serial.println("0");
  pinMode(5, OUTPUT);
}
void loop() {
  while (Serial.available()) {
    onoff = Serial.parseInt();
    if (Serial.read() == '\n') {
      digitalWrite(5, onoff);
      int sensor = analogRead(A0);
      delay(1);
      Serial.println(sensor);
    }
  }
}


/////////////////////////////////////////////////////////////

import processing.serial.*;
Serial myPort;
PVector velocity;
PVector gravity;
PVector position;
PVector acceleration;
PVector wind;
float drag = 0.99;
float mass = 50;
float hDampening;
float windcontrolled;
boolean onoff = false;
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);
  
  //port communication
  printArray(Serial.list());
  String portname=Serial.list()[4];
  println(portname);
  myPort = new Serial(this,portname,9600);
}
void draw() {
  background(255);
  if (!keyPressed){
    wind.x=windcontrolled;
    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;  // A little dampening when hitting the bottom
      position.y = height-mass/2;
  }
  if (position.y >= height-mass) {
      onoff = true;
  }
  else{
    onoff=false;
  }
  
}
void serialEvent(Serial myPort){
  String s=myPort.readStringUntil('\n');
  s=trim(s);
  if (s!=null){
    int value = parseInt(s);
    windcontrolled = map(value,0,1023,-1, 1);
  }
  myPort.write(int(onoff)+"\n");
}
  
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);
  }
}

VIDEO OF EXERCISE 3: 

 

In class exercises

Exercise 1:

Arduino Code:

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);
      int sensor = analogRead(A0);
      delay(1);
      int sensor2 = analogRead(A1);
      delay(1);
      Serial.print(sensor);
      Serial.print(',');
      Serial.println(sensor2);
    }
  }
}

Processing code:

import processing.serial.*;
Serial myPort;
int xPos=0;
int yPos;
boolean onOff=false;
boolean onOff2=false;

void setup(){
  size(960,720);
  printArray(Serial.list());
  String portname=Serial.list()[2];
  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==2){
      xPos=(int)map(values[0],0,1023,0, width);
      //yPos=(int)map(values[1],0,1023,0, height);
        yPos=height/2;
    }
  }
  myPort.write(int(onOff)+","+int(onOff2)+"\n");
}

Exercise 2:

Arduino code:

int left = 0;
int right = 0;

void setup() {
  Serial.begin(9600);
  Serial.println("0,0");
  pinMode(3, OUTPUT);
  pinMode(5, OUTPUT);
}

void loop() {
  while (Serial.available()) {
    right = Serial.parseInt();
    left = Serial.parseInt();
    if (Serial.read() == '\n') {
      analogWrite(3, right);
      analogWrite(5, left);
      int sensor = analogRead(A0);
      delay(1);
      int sensor2 = analogRead(A1);
      delay(1);
      Serial.print(sensor);
      Serial.print(',');
      Serial.println(sensor2);
    }
  }
}

 

Processing code:

import processing.serial.*;
Serial myPort;
int xPos=0;
int yPos=0;
int onOff=0;
int onOff2=0;
int brightness=0;

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);
  brightness=int(map(mouseY, 0, height, 0, 255));
  ellipse(xPos, yPos, 30, 30);
  if (mousePressed) {
    if (mouseX<=width/2) {
      onOff2=brightness;
    } else {
      onOff=brightness;
    }
  } else {
    onOff=onOff2=0;
  }
}

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) {
      xPos=(int)map(values[0], 0, 1023, 0, width);
      //yPos=(int)map(values[1],0,1023,0, height);
      yPos=mouseY;
    }
  }
  myPort.write(int(onOff)+","+int(onOff2)+"\n");
}

 

Exercise 3:

Arduino code:

const int wind = A0;
const int brightness = 3;
int onOff = 0;

void setup() {
  Serial.begin(9600);
  Serial.println("0");


}

void loop() {
  while (Serial.available()) {
    onOff = Serial.parseInt();
    if (Serial.read() == '\n') {
      int sensor = analogRead(wind);
      delay(1);
      Serial.println(sensor);
      if (onOff == 1) {
        analogWrite(brightness, 255);
      } else {
        analogWrite(brightness, 0);
      }
    }
  }
}

 

Processing code:

import processing.serial.*;
Serial myPort;

PVector velocity;
PVector gravity;
PVector position;
PVector acceleration;
PVector wind;
float drag = 0.99;
float mass = 50;
float hDampening;


int pos;
int prevPos = 0;
boolean Right = true;
int maxPos;

void setup() {
  size(640, 360);
  noFill();
  printArray(Serial.list());
  String portname=Serial.list()[2]; 
  myPort = new Serial(this, portname, 9600);
  myPort.clear();
  myPort.bufferUntil('\n');
  


  velocity = new PVector(0, 0);
    position = new PVector(width/2, 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);
  maxPos = (int)map(1023, 0, 1023, 0, width*.01);
 
}

void draw() {
  background(255);
  if (!keyPressed) {
    if (prevPos < pos) {
     Right = true;
    } else if (prevPos > pos) {
Right = false;
    }
    if (!Right) {
      wind.x = -(maxPos-pos);
    } else {
      wind.x = pos;
    }
    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;  // A little dampening when hitting the bottom
    position.y = height-mass/2;
  }
  prevPos = pos;
}

void applyForce(PVector force) {
 
  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);
    pos = (int)map(value, 0, 1023, 0, width*.01);
  }
  if (round(velocity.y) < 0) {
    myPort.write(1 + "\n");
  } else {
    myPort.write(0 + "\n");
  }
}

Serial Communication Exercises

EXERCISE # 1

//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);
      int sensor = analogRead(A0);
      delay(1);
      int sensor2 = analogRead(A1);
      delay(1);
      Serial.print(sensor);
      Serial.print(',');
      Serial.println(sensor2);
    }
  }
}

/*Processing :

import processing.serial.*;
Serial myPort;
int xPos=0;
boolean onOff=false;
boolean onOff2=false;

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);
}

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){
      xPos=(int)map(values[0],0,1023,0, width);
    }
  }
  myPort.write(int(onOff)+","+int(onOff2)+"\n");
}
*/

 

EXERCISE # 2

//Arduino:

int brightness;

void setup() {
  Serial.begin(9600);
  Serial.println("0");
  pinMode(3, OUTPUT);
}

void loop() {
  while (Serial.available()) {
    brightness = Serial.parseInt();
    if (Serial.read() == '\n') {
      analogWrite(3, brightness);
    }
  }
}



/*
Processing:
import processing.serial.*;
Serial myPort;
int yPos=0;
float brightness;

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(width/2,mouseY,30,30);
  brightness = map(mouseY,0,height,0,255);
  myPort.write(int(brightness)+ "\n");
}


*/

 

EXERCISE # 3

//Arduino

int onoff;

void setup() {
  Serial.begin(9600);
  Serial.println("0");
  pinMode(5, OUTPUT);
}

void loop() {
  while (Serial.available()) {
    onoff = Serial.parseInt();
    if (Serial.read() == '\n') {
      digitalWrite(5, onoff);
      int sensor = analogRead(A0);
      delay(1);
      Serial.println(sensor);
    }
  }
}


/*
Processing

import processing.serial.*;
Serial myPort;
PVector velocity;
PVector gravity;
PVector position;
PVector acceleration;
PVector wind;
float drag = 0.99;
float mass = 50;
float hDampening;
float windcontrolled;
boolean onoff = false;

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);
  
  //port communication
  printArray(Serial.list());
  String portname=Serial.list()[0];
  println(portname);
  myPort = new Serial(this,portname,9600);
}

void draw() {
  background(255);
  if (!keyPressed){
    wind.x=windcontrolled;
    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;  // A little dampening when hitting the bottom
      position.y = height-mass/2;
  }
  if (position.y >= height-mass) {
      onoff = true;
  }
  else{
    onoff=false;
  }
  
}

void serialEvent(Serial myPort){
  String s=myPort.readStringUntil('\n');
  s=trim(s);
  if (s!=null){
    int value = parseInt(s);
    windcontrolled = map(value,0,1023,-1, 1);
  }
  myPort.write(int(onoff)+"\n");
}
  
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);
  }
}
*/

 

EXERCISE # 3 VIDEO

Exercises – Jade

Exercise 1

Arduino:

void setup() {
  Serial.begin(9600);
  Serial.println("0,0");
  pinMode(A0, INPUT);
}
 
void loop() {
  while (Serial.available()) {
    if (Serial.read() == '\n') {
     int sensor = analogRead(A0);
     Serial.println(sensor);
   }
  }
}

 

Processing:

import processing.serial.*;
Serial myPort;
int xPos=0;

void setup(){
  size(960,720);
  printArray(Serial.list());
  String portname=Serial.list()[1];
  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(split(s,','));
    if (values.length==1){
      xPos=(int)map(values[0],0,1023,width, 0);
    }
  }
  myPort.write("\n");
}

 

 

Exercise 2

Arduino:

int bright = 0;

void setup() {
  Serial.begin(9600);
  Serial.println("0,0");
  pinMode(2, OUTPUT);
  pinMode(5, OUTPUT);
}

void loop() {
  while (Serial.available()) {
      bright = Serial.parseInt();
      if (Serial.read() == '\n') {
        analogWrite(5, bright);
        Serial.println(0);
    }
  }
}

Processing:

import processing.serial.*;
Serial myPort;

void setup(){
  size(960,720);
  printArray(Serial.list());
  String portname=Serial.list()[1];
  println(portname);
  myPort = new Serial(this,portname,9600);
  myPort.clear();
  myPort.bufferUntil('\n');
}

void draw(){
  background(255);
  ellipse(mouseX,mouseY,30,30); // mark
}

void serialEvent(Serial myPort){
  String s=myPort.readStringUntil('\n');
  myPort.write((int)(map(mouseY, height,0, 0, 255))+"\n");
}

 

Exercise 3

Arduino:

int bounce = 0;

void setup() {
  Serial.begin(9600);
  Serial.println("0,0");
  pinMode(5, OUTPUT);
  pinMode(A0, INPUT);
}

void loop() {
  while (Serial.available()) {
    bounce = Serial.parseInt();
    if (Serial.read() == '\n') {
      digitalWrite(5, bounce);
      int sensor = analogRead(A0);
      Serial.println(sensor);
    }
  }
}

Processing:

import processing.serial.*;
Serial myPort;

PVector velocity;
PVector gravity;
PVector position;
PVector acceleration;
PVector wind;
float drag = 0.99;
float mass = 50;
float hDampening;

boolean flag = false;

void setup() {
  size(640,360);
  printArray(Serial.list());
  String portname=Serial.list()[1];
  println(portname);
  myPort = new Serial(this,portname,9600);
  myPort.clear();
  myPort.bufferUntil('\n');
  
  
  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);
}

void draw() {
  background(255);
  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;  // A little dampening when hitting the bottom
      position.y = height-mass/2;
    } 
  if (round(velocity.y)<0) {
    flag = true;
  } else {
    flag = false;
  }
}
  
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){
  String s=myPort.readStringUntil('\n');
  s=trim(s);
  if (s!=null) {
    println(s);
    int values[]=int(split(s, ','));
    if (values.length==1) {
      wind.x=(float)map(values[0], 0, 1023, 5, -5);
    }
  }
  myPort.write(int(flag)+"\n");

}

Serial Communication Exercises

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:

 

Serial Communication Exercises

Exercise 1:

 //arduino exercise #1
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.print(sensor);
      Serial.println(',');
    }
  }
}
//processing exercise #1

import processing.serial.*;
Serial myPort;
int xPos=0;
int yPos=height/2;

void setup() {
  size(960, 720);
  printArray(Serial.list());
  String portname=Serial.list()[3];
  println(portname);
  myPort = new Serial(this, portname, 9600);
  myPort.clear();
  myPort.bufferUntil('\n');
}

void draw() {
  background(255);
  ellipse(xPos, yPos, 30, 30);
}

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) {
      xPos=(int)map(values[0], 0, 1023, 0, width);
    }
  }
  myPort.write(xPos+','+"\n");
}

//arduino exercise #2

int left = 0;
int right = 0;

void setup() {
  Serial.begin(9600);
  Serial.println("0,0");
  pinMode(3, OUTPUT);
}

void loop() {
  while (Serial.available()) {
    right = Serial.parseInt();
    left = Serial.parseInt();
    if (Serial.read() == '\n') {
      analogWrite(3, right);
      Serial.print(0);
      Serial.print(',');
      Serial.println(0);
    }
  }
}

Exercise 2:

//arduino exercise #2

int left = 0;
int right = 0;

void setup() {
  Serial.begin(9600);
  Serial.println("0,0");
  pinMode(3, OUTPUT);
}

void loop() {
  while (Serial.available()) {
    right = Serial.parseInt();
    left = Serial.parseInt();
    if (Serial.read() == '\n') {
      analogWrite(3, right);
      Serial.print(0);
      Serial.print(',');
      Serial.println(0);
    }
  }
}
//processing exercise #2 

import processing.serial.*;
Serial myPort;
int xPos=0;

void setup(){
  size(960,720);
  printArray(Serial.list());
  String portname=Serial.list()[3];
  println(portname);
  myPort = new Serial(this,portname,9600);
  myPort.clear();
  myPort.bufferUntil('\n');
}

void draw(){
  background(255);
}

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){
      xPos=(int)map(mouseX,0,width, 0, 255);
    }
  }
  myPort.write(xPos+","+0+"\n");
}
//arduino exercise #3
 
void setup() {
  Serial.begin(9600);
  Serial.println("0,0");
  pinMode(3, OUTPUT);
}
 
void loop() {
  while (Serial.available()) {
    int onOff = Serial.parseInt();
    if (Serial.read() == '\n') {
      digitalWrite(3, onOff);
      int sensor = analogRead(A0);
      delay(1);
      Serial.println(sensor);
    }
  }
}

Exercise 3:

//arduino exercise #3
 
void setup() {
  Serial.begin(9600);
  Serial.println("0,0");
  pinMode(3, OUTPUT);
}
 
void loop() {
  while (Serial.available()) {
    int onOff = Serial.parseInt();
    if (Serial.read() == '\n') {
      digitalWrite(3, onOff);
      int sensor = analogRead(A0);
      delay(1);
      Serial.println(sensor);
    }
  }
}
//processing exercise #3

import processing.serial.*;
Serial myPort;

PVector velocity;
PVector gravity;
PVector position;
PVector acceleration;
PVector wind;
float drag = 0.99;
float mass = 50;
float hDampening;
boolean onOff=false;
float analog;

void setup() {
  size(640, 360);
  String portname=Serial.list()[3];
  println(portname);
  myPort = new Serial(this, portname, 9600);
  myPort.clear();
  myPort.bufferUntil('\n');

  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);
}
void draw() {
  background(255);
  if (!keyPressed) {
    wind.x= analog;
    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;  // A little dampening when hitting the bottom
    position.y = height-mass/2;
  }
  
  if (position.y >= height - mass){
  onOff = true;
  }
  else{
  onOff = false;
  }
}

void serialEvent(Serial myPort) {
  String s=myPort.readStringUntil('\n');
  s=trim(s);
  int values = parseInt(s);
  if (s!=null) {
    analog =map(values, 0, 1023, -3, 3);
  }
  myPort.write(int(onOff)+"\n");
}

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);
  }
}


Exercise 3 video:

https://www.youtube.com/shorts/TAmqSXp7FqE