Cambia de Video con una FotoCelda


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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *