Go Down

Topic: Advice on Mp3 player shield interfaced with E18-D80NK IR sensor (FIXED/UPDATED) (Read 678 times) previous topic - next topic

Hi everyone,

I am trying to trigger a single sample off the Sparkfun Mp3 player shield using a sensor as input. In this example I am talking about the E18-d80NK, as it returns just 0's and 1's as opposed to going through conditional statements or whatever using a rangefinder etc, but I have a number of other sensors so if you think it will work better with one of them I am open to suggestions. I have got the sample loaded and mp3 shield working with example patches, and the sensor working, but both in isolation of each other.

I have done similar things before, but always interfaced with maxuino and this time that is not an option. I have been going crazy trying to make it work for over a week but so far no luck, even using the various other very similar projects posted around the web.

This is where I have got to splicing various other pieces together, I tried to go step by step as simple as possible but it just wont work, I figured it was time to ask the experts!

Code: [Select]
// libraries
#include <SPI.h>
#include <SdFat.h>
#include <SdFatUtil.h>
#include <SFEMP3Shield.h>

// initialize MP3 card
SdFat sd;
SFEMP3Shield MP3player;

// constant variables  
   
   int inputPin = 5;                    // IR sensor input pin
   unsigned long pauseTime = 10000;     // how long the pause will be after music turned off
   int readingInterval = 10;            // interval to read the sensor

 
// changing variables  

   int trigger = 1;                     // variable for pin status
   byte result;                         // variable for mp3 player shield, can be used to debug

       
// setup    
   
   void setup() {
     pinMode(inputPin, INPUT);                        // make sensor an input
     digitalWrite(inputPin, HIGH);                    // activate internal pull-up resistor
     result = MP3player.begin();                      // start mp3 player shield
     MP3player.setVolume(10, 10);                     // set volume of the mp3 player
     

 
   }


// loop
   
   void loop(){
     
     trigger = digitalRead(inputPin);                 // read sensor
     if (trigger == 0) {                              // if sensed
         result = MP3player.playTrack(1);      // play track                          
         delay(pauseTime);                            // wait...  
         
         
       
   }
     delay(readingInterval);                          // wait with reading
  }  




 
 





Thanks in advance, too much sleep has already been lost.

Jack

Hi guys, managed to work it out with a fun all night coding experience.

Here is my updated and very messy code, I have it working with 3 sensors, two E18's on the digital inputs and a sharp distance on the analog.

Any additional advice to make it cleaner or anything would be greatly appreciated.

But  I did it! (patting myself on back)

Cheers

Code: [Select]


// libraries
#include <SPI.h>
#include <SdFat.h>
#include <SdFatUtil.h>
#include <SFEMP3Shield.h>

// initialize MP3 card
SdFat sd;
SFEMP3Shield MP3player;

// constant variables  
   
   int inputPin = 0;                    // IR sensor input pin
   unsigned long pauseTime = 5000;     // how long the pause will be after music turned off
   int readingInterval = 10;     // interval to read the sensor
   int SignalPin=5;
   int SignalPin2=4;
   #define SignalPin 5
   #define SignalPin2 4
   
 
 
 


       
// setup    
   
   void setup() {
     Serial.begin(9600);
     sd.begin(SD_SEL, SPI_HALF_SPEED);
     MP3player.begin();
     MP3player.setVolume(10, 10);                    
     pinMode(inputPin, INPUT);
     pinMode(SignalPin, INPUT);
     
     

 
   }


// loop
   
   void loop(){
     if (analogRead(inputPin) > 450)       {                            
         MP3player.playTrack(2);                          
         delay(pauseTime);    
                 
 
 
     }
     {
     {  
     int Signal = 1;

 Signal = digitalRead(SignalPin);
 
 if (Signal == 1){
   Serial.print (Signal);
   Serial.println("  no obstacle");
 }
 
 else {
   MP3player.playTrack(1);                          
         delay(pauseTime);
 }
 
     }
   
     {
   int Signal = 1;

 Signal = digitalRead(SignalPin2);
 
 if (Signal == 1){
   Serial.print (Signal);
   Serial.println("  no obstacle");
 }
 
 else {
   MP3player.playTrack(2);                          
         delay(pauseTime);
 }
   
 
     }
     }
   
     
     delay(readingInterval);                          // wait with reading
     
 
   
     }
 

   
   










 
 



Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy