This Processing sketch controls the playback of a Quicktime movie using serial data. To use it, send a serial value from 0 – 255. The movie position will be set based on that value. 0 = beginning of movie, 255 = end of movie. It doesn’t matter what’s sending the serial data, as long as the value is between 0 and 255.
/*
Serial Movie controller
Language: Processing
Reads a value from 0 - 255 from the serial port. Then uses that
value to control playback of a quicktime movie.
by Tom Igoe
Created 8 Oct. 2006
Modified:
*/
import processing.serial.*;
import processing.video.*;
Serial myPort; // The serial port
int sensorValue; // value of the byte received
Movie myMovie; // variable to store an instance of the movie library
float movieDuration; // duration of the movie you're using
void setup() {
// set the window size:
size(200,200);
// List all the available serial ports
println(Serial.list());
// I know that the first port in the serial list on my mac
// is always my Arduino module, so I open Serial.list()[0].
// Change the 0 to the appropriate number of the serial port
// that your microcontroller is attached to.
myPort = new Serial(this, Serial.list()[0], 9600);
// set the framerate for this sketch:
framerate(30);
// fill in your own movie here. Place it in a folder called "Data"
// inside your sketch folder:
myMovie = new Movie(this, "station.mov");
myMovie.loop();
// get the movie duration:
movieDuration = myMovie.duration();
}
void draw() {
background(0);
// if there's a movie to read, read it:
if(myMovie.available()) {
myMovie.read();
}
// calculate the movie position based on the value from the sensor.
// the sensor value can range from 0 - 255, so dividing the sensorValue
// by 255 and multiplying by the duration always gives some fraction of
// the total movie duration:
float moviePosition = ((float)sensorValue / (float)255) * movieDuration;
// jump to the calculated movie position:
myMovie.jump(moviePosition);
// draw the movie:
image(myMovie, 0, 0);
}
// serialEvent method is run automatically by the Processing applet
// whenever the buffer reaches the byte value set in the bufferUntil()
// method in the setup():
void serialEvent(Serial myPort) {
// read the serial buffer:
sensorValue = myPort.read();
}
Here’s a simple Wiring/Arduino program to send data to this Processing program. Attach a potentiometer or other analog sensoe to analog input 0:
void setup() {
// open the serial port at 9600 bits per second:
Serial.begin(9600);
}
void loop() {
// read the potentiometer, reduce the range to 0 - 255 by dividing by 4:
int analogValue = analogIn(0) /4;
// send the value out the serial port:
Serial.print(analogValue, BYTE);
// delay 10 milliseconds so the analog to digital converter settles:
delay(10);
}