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: 

 

Leave a Reply