Media Controller 3

To get back to the call and response issue, I want to resolve it for future reference, and I think I may have found the issue: a misplaced ‘}’. Here is the arduino code:

int analogOne = 0; // analog input int analogTwo = 1; int analogThree = 2; int analogFour=3; int analogFive=4; int analogSix=5; int digitalOne = 2; // digital input int sensorValue = 0; // reading from the sensor void setup() { // configure the serial connection: Serial.begin(9600); // configure the digital input: pinMode(digitalOne, INPUT); establishContact(); } void loop() { if(Serial.available()>0){ int inByte=Serial.read(); sensorValue = analogRead(analogOne); Serial.print(sensorValue, DEC); Serial.print(“,”); sensorValue = analogRead(analogTwo); Serial.print(sensorValue, DEC); Serial.print(“,”); sensorValue = analogRead(analogThree); Serial.print(sensorValue, DEC); Serial.print(“,”); sensorValue = analogRead(analogFour); Serial.print(sensorValue, DEC); Serial.print(“,”); sensorValue = analogRead(analogFive); Serial.print(sensorValue, DEC); Serial.print(“,”); sensorValue = analogRead(analogSix); Serial.print(sensorValue, DEC); Serial.print(“,”); sensorValue = digitalRead(digitalOne); // print the last sensor value with a println() Serial.println(sensorValue, DEC); } } void establishContact(){ while(Serial.available()<=0){ Serial.println(“hello”); delay(300); } }
And this processing sketch takes the serial input, prints the values of the sensors, and changes the color of the background based on the first three sonsors.
boolean firstContact=false;

import processing.serial.*;
Serial myPort;                  

PFont f;

float sensor1=200;
float sensor2=0;
float sensor3=60;
float sensor4=0;
float sensor5=0;
float sensor6=0;
float sensor7=0;

void setup() {

  size(900,480);
  f=createFont("Arial",16,true);
  println(Serial.list());

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

void serialEvent(Serial myPort) { 

  String myString = myPort.readStringUntil('\n');
  if (myString != null) {
     myString = trim(myString);

    if(firstContact==false){
      if(myString.equals("hello")){
        myPort.clear();
        firstContact=true;
        myPort.write('A');
      }
    }
    else{
    int sensors[] = int(split(myString, ','));
    for (int sensorNum = 0; sensorNum < sensors.length; 
      sensorNum++) {
      print("Sensor " + sensorNum + ": " +
             sensors[sensorNum] + "\t");
      println();
      if (sensors.length > 1) {
        sensor1 =map(sensors[0],0,1000,0,255);
        sensor2 = map(sensors[1],250,500,0,255);
        sensor3= map(sensors[2],250,500,0,255);
        sensor4=sensors[3];
        sensor5=sensors[4];
        sensor6=sensors[5];
        sensor7=sensors[6];
        if(sensors[3]==1){
          sensor2=sensor2/2;
          }
        }
       }
    }
    myPort.write('A');
}
}

void draw() {
  background(sensor1,sensor2,sensor3);
  textFont(f);
  fill(0);
  textAlign(LEFT);
  text("sensor1: " + sensor1 +
       "   sensor2: " + sensor2 +
       "   sensor3: " + sensor3 +
       "   sensor4: " + sensor4 +
       "   sensor5: " + sensor5 +
       "   sensor6: " + sensor6 +
       "   switch: "  + sensor7, width/10, height/4);
}

And now the two put together with the video code:

/* This code reads 6 analog sensors and one digital switch to
control background color, alpha, and speed of a video based
on the sensor readings. Video is switched when sensor 4 is >
400, background is dependent on the first three sensors,
movieAlpha, or transparency, is dependent on sensor5, and
the rate on sensor6. The switch is set up to change the
readings of the sensors in the if statement, but isn't
doing much in this version
*/ 

import processing.serial.*;
Serial myPort;
boolean firstContact=false;
import jmcvideo.*;
import processing.opengl.*;
import javax.media.opengl.*; 

int sensor1;
int sensor2=0;
int sensor3=0;
int sensor4;
int sensor5=0;
int sensor6;
int sensor7=0;
float movieRate=0;
float movieAlpha=0;

JMCMovieGL myMovie;
int pvw, pvh;
String[] vids = new String[]{"static.mov","sledding.mov",
               "slide.mov","californiadreams.mov",
            "commercials.mov", "gummibears.mov","wwf.mov"};
int vidNum = 0;

void setup() {
  size(800,600, OPENGL);
  frame.setResizable(true);
  background(0);

  myMovie = movieFromDataPath(vids[vidNum]);
  myMovie.loop();

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

}

void serialEvent(Serial myPort) { 

  String myString = myPort.readStringUntil('\n');

  // if you got any bytes other than the linefeed:
  if (myString != null) {

    myString = trim(myString);

    if(firstContact==false){
      if(myString.equals("hello")){
        myPort.clear();
        firstContact=true;
        myPort.write('A');
        }
     }
    else{
       int sensors[] = int(split(myString, ','));

    // print out the values you got:
       for (int sensorNum = 0; sensorNum < sensors.length;
            sensorNum++) {
       print("Sensor " + sensorNum + ": " + sensors[sensorNum]
              + "\t");
       println();
       if (sensors.length > 1) {
          sensor1=sensors[0];
          sensor2=sensors[1];
          sensor3=sensors[2];
          sensor4=sensors[3];
          sensor5=sensors[4];
          sensor6=sensors[5];
          sensor7=sensors[6];
          if(sensors[3]==1){
             sensor2=sensor2/2;
             }
          }
       }
    }
    myPort.write('A');
}
}

void draw()
{
   background(map(sensor2,0,1000,0,255),
                  map(sensor3,250,500,0,255),
                  map(sensor5,100,900,0,255));  

  PGraphicsOpenGL pgl = (PGraphicsOpenGL) g;

  GL gl = pgl.beginGL();
  {
    if (pvw != width || pvh != height)
    {
      background(0);
      gl.glViewport(0, 0, width, height);
      pvw = width;
      pvh = height;
    }
    movieAlpha=map(sensor5,0,900,255,1);
    myMovie.centerImage(gl);
    myMovie.alpha=(1f*movieAlpha/255f);
    movieRate=map(sensor6,0,1000,.2,2);
    myMovie.setRate(movieRate);
  }
  pgl.endGL();

 if(sensor4>700){
   vidNum = (vidNum + 1) % vids.length;
   myMovie.switchVideo(vids[vidNum]); }else{
   myMovie.loop();}
}  

JMCMovieGL movieFromDataPath(String filename)
{
  return new JMCMovieGL(this, filename, RGB);
}

And it works !!!!!!