Por medio de la luz ambiente, gracias al arduino, se puede cambiar un video que se reproduce en processing.
Después de crear un nuevo documento y guardarlo, deben crear una carpeta con el nombre de «data» en el mismo lugar donde guardaron el proyecto, el cual contendrá un el video1.mp4 y video2.mp4. dentro del programa deben descargar la libreria Mini, y video,
import processing.serial.*;
import processing.video.*;
Serial myPort; // instancia de la clase Serial
int sensorValue = 0; // variable para almacenar el valor del sensor de luz
Movie video1, video2;
boolean playingVideo1 = true;
void setup() {
fullScreen();
background(0);
// carga el primer video
video1 = new Movie(this, "video1.mp4");
// carga el segundo video
video2 = new Movie(this, "video2.mp4");
// lista todos los puertos seriales disponibles
printArray(Serial.list());
// selecciona el puerto serial que está conectado a su placa Arduino
String portName = Serial.list()[0];
// establece la velocidad de comunicación con el puerto serial
myPort = new Serial(this, "dev/cu.usbmodem14301", 9600);
// reproduce el primer video al iniciar el programa
video1.loop();
}
void draw() {
// lee el valor del sensor de luz
if (myPort.available() > 0) {
sensorValue = myPort.read();
}
// muestra el valor del sensor de luz en la consola
println(sensorValue);
// cambia entre los videos si se detecta un cambio en la luz
if (sensorValue > 100 && playingVideo1) {
playingVideo1 = false;
// detiene el primer video si se está reproduciendo
if (video1.isPlaying()) {
video1.stop();
}
// reproduce el segundo video si el sensor de luz detecta luz
if (!video2.isPlaying()) {
video2.loop();
}
} else if (sensorValue <= 100 && !playingVideo1) {
playingVideo1 = true;
// detiene el segundo video si se está reproduciendo
if (video2.isPlaying()) {
video2.stop();
}
// reproduce el primer video si el sensor de luz no detecta luz
if (!video1.isPlaying()) {
video1.loop();
}
}
// dibuja el video en el lienzo adaptándolo a la pantalla
pushMatrix();
translate(width/2, height/2);
if (playingVideo1) {
float videoRatio = video1.width/float(video1.height);
float canvasRatio = width/float(height);
float videoWidth, videoHeight;
if (videoRatio > canvasRatio) {
videoWidth = width;
videoHeight = videoWidth / videoRatio;
} else {
videoHeight = height;
videoWidth = videoHeight * videoRatio;
}
image(video1, -videoWidth/2, -videoHeight/2, videoWidth, videoHeight);
} else {
float videoRatio = video2.width/float(video2.height);
float canvasRatio = width/float(height);
float videoWidth, videoHeight;
if (videoRatio > canvasRatio) {
videoWidth = width;
videoHeight = videoWidth / videoRatio;
} else {
videoHeight = height;
videoWidth = videoHeight * videoRatio;
}
image(video2, -videoWidth/2, -videoHeight/2, videoWidth, videoHeight);
}
popMatrix();
}
void movieEvent(Movie m){
m.read();
}
Para el Arduino es necesario una foto celda, 1 resistencia de 220 omnios, y el siguiente código

int sensorPin = A0;
int sensorValue = 0;
void setup() {
// establece la velocidad de comunicación con el puerto serial
Serial.begin(9600);
}
void loop() {
// lee el valor del sensor de luz
sensorValue = analogRead(sensorPin);
// envía el valor del sensor de luz a través del puerto serial
Serial.write(sensorValue);
// espera 100 milisegundos antes de leer el valor del sensor de luz nuevamente
delay(100);
}