playing2 videos and 2 sound from 4 ultrasonic sensors

ileile
edited August 2015 in Library Questions

HI! the problem that i have is that videos and sound reset all the time, when you have the and next to the sensor it should keep playing the videos or sounds, but instead some times (most of the time), just restart, can't figure out where the problem is

any ideas? here is the processing code, and bellow the arduino code

            import ddf.minim.spi.*;
            import ddf.minim.signals.*;
            import ddf.minim.*;
            import ddf.minim.analysis.*;
            import ddf.minim.ugens.*;
            import ddf.minim.effects.*;
            import de.voidplus.soundcloud.*;
            import processing.video.*;  //Importo la librerÌa para tratamiento de video
            import processing.serial.*; //Importo la librerÌa para tratar datos puerto serie
            Movie[] myMovie;
            Minim minim;
            AudioPlayer player1;
            AudioPlayer player2;
            Serial arduino;
            byte[] valor = new byte[]{127,127,127,127};
            boolean shouldStop = false; 
            Movie currentMovie;
            void setup() {
              background(0);
              arduino = new Serial(this, Serial.list()[5], 9600); // Abro el puerto serie
              size(1400, 800); // El tamaÒo de la pantalla
             myMovie = new Movie[] { 
                new Movie(this, "s1f.mp4"), 
                new Movie(this, "sf2.mp4") 
              };
               minim = new Minim(this);
              player1 = minim.loadFile("aguaf.mp3");
              player1.mute();
              player2 = minim.loadFile("viento2.mp3");
               player2.mute();
              //Reproducimos la pelicula
              myMovie[0].stop();
              myMovie[1].stop();
            }

            void movieEvent(Movie m) {
              m.read();
            }

            void draw() {
              background(0);
              if (arduino.available() > 0)  // Consulto si hay datos en el puerto serie
              {  
                arduino.readBytes(valor);        
              }
              if (valor[0]<20 && valor[1]<20 && valor[0] > 0 && valor[1] > 0){ // Distancia igual /inferior para que se reproduzca el video   
                  myMovie[0].stop();
                  currentMovie = myMovie[1];
                 shouldStop = false; 
                }
                else if (valor[0]<20 && valor[0] > 0) {
                  currentMovie = myMovie[0];
                  myMovie[1].stop();
                  shouldStop = false;
                } else {
                  if (shouldStop) {
                    myMovie[0].stop();
                    myMovie[1].stop();
                    currentMovie = null;
                  } else {
                    shouldStop = true;
                  }  
                }
                if (valor[2]<20 && valor[2] > 0) {
                  player1.play();

                  player1.unmute();

                }
                else {
                  player1.mute();
                }
              if (valor[3]<20 && valor[3] > 0) {
                  player2.play();

                  player2.unmute(); 

                }
                else {
                  player2.mute();
                }
              if (currentMovie != null) {

                image(currentMovie, 0, 0);
                currentMovie.loop();
              }
            }

arduino

    `#include <NewPing.h>
    #define SONAR_NUM     4 // Number or sensors.
    #define MAX_DISTANCE 200 // Maximum distance (in cm) to ping.
    #define PING_INTERVAL 633 // Milliseconds between sensor pings (29ms is about the min to avoid cross-sensor echo).
    unsigned long pingTimer[SONAR_NUM]; // Holds the times when the next ping should happen for each sensor.
    byte cm[SONAR_NUM];         // Where the ping distances are stored.
    uint8_t currentSensor = 0;          // Keeps track of which sensor is active.
    NewPing sonar[SONAR_NUM] = {     // Sensor object array.
      NewPing(11, 12, MAX_DISTANCE), // Each sensor's trigger pin, echo pin, and max distance to ping.
      NewPing(10, 9, MAX_DISTANCE),
      NewPing(8, 7, MAX_DISTANCE),
      NewPing(14, 15, MAX_DISTANCE)

    };
    void setup() {
      Serial.begin(9600);
      pingTimer[0] = millis() + 75;           // First ping starts at 75ms, gives time for the Arduino to chill before starting.
      for (uint8_t i = 1; i < SONAR_NUM; i++) // Set the starting time for each sensor.
        pingTimer[i] = pingTimer[i - 1] + PING_INTERVAL;
    }
    void loop() {
      for (uint8_t i = 0; i < SONAR_NUM; i++) { // Loop through all the sensors.
        if (millis() >= pingTimer[i]) {         // Is it this sensor's time to ping?
          pingTimer[i] += PING_INTERVAL * SONAR_NUM;  // Set next time this sensor will be pinged.
          if (i == 0 && currentSensor == SONAR_NUM - 1) oneSensorCycle(); // Sensor ping cycle complete, do something with the results.
          sonar[currentSensor].timer_stop();          // Make sure previous timer is canceled before starting a new ping (insurance).
          currentSensor = i;                          // Sensor being accessed.
          cm[currentSensor] = 0;                      // Make distance zero in case there's no ping echo for this sensor.
          sonar[currentSensor].ping_timer(echoCheck); // Do the ping (processing continues, interrupt will call echoCheck to look for echo).
        }
      }
      // The rest of your code would go here.
    }
    void echoCheck() { // If ping received, set the sensor distance to array.
      if (sonar[currentSensor].check_timer())
        cm[currentSensor] = sonar[currentSensor].ping_result / US_ROUNDTRIP_CM;
    }
     void oneSensorCycle() { // Sensor ping cycle complete, do something with the results.
        Serial.write(cm, SONAR_NUM);
    };

````

Answers

Sign In or Register to comment.