We are about to switch to a new forum software. Until then we have removed the registration on this forum.
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
You'll get a better response if you format your code. Here's how:
http://forum.processing.org/two/discussion/8045/how-to-format-code-and-text
yes thanks!