trouble with wTrig.isTrackPlaying(1)

Hi there,

I feel like I am so close with my code! I cannot get this if loop to work

      if (wTrig.isTrackPlaying(1)){
      Serial.print('leave track to play jim!');
}

I know that the track is playing (using wTrig.trackPlayPoly) because I can see on my serial monitor and hear the track.

I am using a ultrasonic sensor to detect where someone is standing. Depending on how close they are standing I want to trigger a different track. I have divided the space in front of the sensor up into 3 sections (small, medium and large). The code I have successfully stops a track playing when the person moves from one section to another.

However, I cannot get the while loop to work. I want to make it work so that if a person stands in the section it plays a track, and when they leave the section it stops playing. At the moment the track continuously starts the first few seconds. I tried to create a while loop and use wTrig.isTrackPlaying(1) so that when the first track is playing it exits the loop and doesn’t restart the trigger to play. It isn’t working. It also doesn’t even print Serial.print(‘leave track to play jim!’ I have tried using break and return to exit the loop but to no avail.

I would be grateful for any help on how to get the track to be played until the person exits the designated area.

More context here on this arduino forum; https://forum.arduino.cc/t/trouble-with … /1104299/6

The code below is the code I am working on. I have only tried to add the if statement to the first section.

//orange loop

while (OrangeSensor < 10) {

    Serial.print("orange - small- 0007 ");
    Serial.print(OrangeSensor);
    Serial.println();
    //play correct track
    wTrig.trackPlayPoly(1); // start track 
    delay(1000);// add in delay to give a chance to move to another section
    //pause all other tracks
    wTrig.trackPause(2);
    wTrig.trackPause(3); 
    break;

      if (wTrig.isTrackPlaying(1)){
      Serial.print('leave track to play jim!');
      //break;
      return 0;
  }

}
 
 while((OrangeSensor > 11) && (OrangeSensor < 20)) {
    Serial.print("orange - medium - 0004 ");
    Serial.print(OrangeSensor);
    Serial.println();
    //play correct 
    wTrig.trackPlayPoly(2);
    delay(1000);// add in delay to give a chance to move to another segment 
    //pause all other tracks
    wTrig.trackPause(1);
    wTrig.trackPause(3);
    break;
  } 
    
  
  while((OrangeSensor > 21) && (OrangeSensor < 30)) {
    Serial.print("orange - large - 0001 ");
    Serial.print(OrangeSensor);
    Serial.println();
    wTrig.trackPlayPoly(3);
    //delay(1000);// add in delay to give a chance to move to another segment 
    //pause all other tracks
    wTrig.trackPause(1);
    wTrig.trackPause(2);
    break;
  }

Full code below;

//https://www.theengineeringprojects.com/2015/02/interfacing-multiple-ultrasonic-sensor-arduino.html
//sucessfully added second sensor - one sensor controls lights, the other sound (and light)
//attempting to add WAV trigger 
// to add libraries from github; navigate to folder and use git clone on master branch 

#include <AltSoftSerial.h>    // Arduino build environment requires this
#include <wavTrigger.h>
#include <Metro.h> // no idea 
//uno             wav trigger 
//GND  <------> GND
//Pin9 <------> RX

wavTrigger wTrig;             // Our WAV Trigger object
char gWTrigVersion[VERSION_STRING_LEN];

//ORANGE 
#define trigPin1 7
#define echoPin1 6

//PINK
#define trigPin2 10
#define echoPin2 12

//BLUE
#define trigPin3 11
#define echoPin3 5

long duration, distance, OrangeSensor,PinkSensor, BlueSensor;

void setup()
{
  Serial.begin (9600);
  // If the Arduino is powering the WAV Trigger, we should wait for the WAV
  //  Trigger to finish reset before trying to send commands.
  //delay(1000);



  //WAV Trigger startup at 57600
  wTrig.start();
  delay(10);

  if (wTrig.getVersion(gWTrigVersion, VERSION_STRING_LEN)) {
    Serial.print("HELLO FROM WAV");
    Serial.print(wTrig.getNumTracks());
  }
  else {
    Serial.print("Something's wrong");
  }
  
  // Send a stop-all command and reset the sample-rate offset, in case we have
  //  reset while the WAV Trigger was already playing.
  wTrig.stopAllTracks();
  wTrig.samplerateOffset(0); 

  //enable reporting
  wTrig.setReporting(true);
  delay(100);  



  Serial.print("we've started");
  //delay(1000);
  wTrig.trackLoad(1);
  delay(10);
  //wTrig.trackPlaySolo(1); 
  //delay(10000);
  //Serial.print(BlueSensor);
  
  //set orange sensor
  pinMode(trigPin1, OUTPUT);
  pinMode(echoPin1, INPUT);

  //set pink sensor
  pinMode(trigPin2, OUTPUT);
  pinMode(echoPin2, INPUT);

  //set blue sensor  
  pinMode(trigPin3, OUTPUT);
  pinMode(echoPin3, INPUT);
}

void loop() {
  //orange sensor
  SonarSensor(trigPin1, echoPin1);
  OrangeSensor = distance;

  //pink sensor
  SonarSensor(trigPin2, echoPin2);
  PinkSensor = distance;

  //blue sensor
  SonarSensor(trigPin3, echoPin3);
  BlueSensor = distance;



//orange loop

while (OrangeSensor < 10) {

    Serial.print("orange - small- 0007 ");
    Serial.print(OrangeSensor);
    Serial.println();
    //play correct track
    wTrig.trackPlayPoly(1); // start track 
    delay(1000);// add in delay to give a chance to move to another section
    //pause all other tracks
    wTrig.trackPause(2);
    wTrig.trackPause(3); 
    break;

      if (wTrig.isTrackPlaying(1)){
      Serial.print('leave track to play jim!');
      //break;
      return 0;
  }

}
 
 while((OrangeSensor > 11) && (OrangeSensor < 20)) {
    Serial.print("orange - medium - 0004 ");
    Serial.print(OrangeSensor);
    Serial.println();
    //play correct 
    wTrig.trackPlayPoly(2);
    delay(1000);// add in delay to give a chance to move to another segment 
    //pause all other tracks
    wTrig.trackPause(1);
    wTrig.trackPause(3);
    break;
  } 
    
  
  while((OrangeSensor > 21) && (OrangeSensor < 30)) {
    Serial.print("orange - large - 0001 ");
    Serial.print(OrangeSensor);
    Serial.println();
    wTrig.trackPlayPoly(3);
    //delay(1000);// add in delay to give a chance to move to another segment 
    //pause all other tracks
    wTrig.trackPause(1);
    wTrig.trackPause(2);
    break;
  }

// pink loop
if (PinkSensor < 39) {
    //Serial.print("pink - small - 0008 ");
    //Serial.print(PinkSensor);
   // Serial.println();
    //digitalWrite(play, LOW);  
  } else if ((PinkSensor > 40) && (PinkSensor < 99)) {
    /*Serial.print("Pink - medium - 0005 ");
    Serial.print(PinkSensor);
    Serial.println();
    //digitalWrite(play, LOW); */      
  } else if ((PinkSensor > 100) && (PinkSensor < 150)) {
    /*Serial.print("Pink - large - 0002 ");
    Serial.print(PinkSensor);
    Serial.println();*/
    //digitalWrite(play, LOW);        // dont play recording 
  }

  //blue loop
if (BlueSensor < 39) {
    /*Serial.print("blue - small - 0009 ");
    Serial.print(BlueSensor);
    Serial.println();
    //digitalWrite(play, LOW);  */
  } else if ((BlueSensor > 40) && (BlueSensor < 99)) {
    /*Serial.print("Pink - medium - 0006 ");
    Serial.print(BlueSensor);
    Serial.println();
    //digitalWrite(play, LOW); */      
  } else if ((BlueSensor > 100) && (BlueSensor < 150)) {
    /*Serial.print("Blue - large - 0003 ");
    Serial.print(BlueSensor);
    Serial.println();*/
    //digitalWrite(play, LOW);        // dont play recording 
  }

    //no idea why this doesn't work 
   else if ((OrangeSensor >151) && (PinkSensor >151)  ) {
      //placed here to pevent LEDs constantly flickering 
    Serial.print('no one is within the paremeters ');
    Serial.println();
    //digitalWrite(play, LOW); // player off 
          } 
          





}

void SonarSensor(int trigPin,int echoPin)
{
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration/2) / 29.1;
}





/*
distances shut each other off after 1 second, (1 second overlap) but tracks start repeatidly 

while (OrangeSensor < 10) {
    Serial.print("orange - small- 0007 ");
    Serial.print(OrangeSensor);
    Serial.println();
    //play correct 
    wTrig.trackPlayPoly(1); // start track 
    delay(1000);// add in delay to give a chance to move to M
    //pause all other tracks
    wTrig.trackPause(2);
    wTrig.trackPause(3); 
    break;
}

 
 while((OrangeSensor > 11) && (OrangeSensor < 20)) {
    Serial.print("orange - medium - 0004 ");
    Serial.print(OrangeSensor);
    Serial.println();
    //play correct 
    wTrig.trackPlayPoly(2);
    delay(1000);// add in delay to give a chance to move to another segment 
    //pause all other tracks
    wTrig.trackPause(1);
    wTrig.trackPause(3);
    break;
  } 
    
  
  while((OrangeSensor > 21) && (OrangeSensor < 30)) {
    Serial.print("orange - large - 0001 ");
    Serial.print(OrangeSensor);
    Serial.println();
    wTrig.trackPlayPoly(3);
    //delay(1000);// add in delay to give a chance to move to another segment 
    //pause all other tracks
    wTrig.trackPause(1);
    wTrig.trackPause(2);
    break;
  }*/

Try getting rid of all except one zone in the code and get one zone working correctly, then try adding in a 2nd or 3rd zone - also try re-ordering the pause & play sections, where the detection pauses the others and then plays the appropriate one (as-is the pauses are after beginning playing the correct one)