Music Maker - Trouble with useInterrupt

Adafruit Ethernet, Motor, Proto, Wave, Datalogger, GPS Shields - etc!

Moderators: adafruit_support_bill, adafruit

Please be positive and constructive with your questions and comments.
Locked
User avatar
Jim_Mc
 
Posts: 3
Joined: Sun Nov 07, 2021 3:41 pm

Music Maker - Trouble with useInterrupt

Post by Jim_Mc »

I am very new to programming. I’m sending an input to pin 3 of a MusicMaker from another Arduino to start and stop random music files. I had things working with playFullFile but know I need to use useInterrupt and starPlayingFile if I want to stop in the middle of a file. I have things now starting and stopping like I want, but I have garbled sound as if it is quickly starting each file for a fraction of a second. It also does that now with playFullFile so I think I’m using useInterrupt wrong. Any help would be greatly appreciated. Thanks

Code: Select all

// include SPI, MP3 and SD libraries
#include <SPI.h>
#include <Adafruit_VS1053.h>
#include <SD.h>

int comState = 2;
int lastComState = 2;
const int comPin = 3;

 //Communication pin from lighting Arduino (needs grounded)

// define the pins used
//#define CLK 13       // SPI Clock, shared with SD card
//#define MISO 12      // Input data, from VS1053/SD card
//#define MOSI 11      // Output data, to VS1053/SD card
// Connect CLK, MISO and MOSI to hardware SPI pins. 
// See http://arduino.cc/en/Reference/SPI "Connections"

// These are the pins used for the breakout example
#define BREAKOUT_RESET  9      // VS1053 reset pin (output)
#define BREAKOUT_CS     10     // VS1053 chip select pin (output)
#define BREAKOUT_DCS    8      // VS1053 Data/command select pin (output)
// These are the pins used for the music maker shield
#define SHIELD_RESET   -1      // VS1053 reset pin (unused!)
#define SHIELD_CS     7      // VS1053 chip select pin (output)
#define SHIELD_DCS    6      // VS1053 Data/command select pin (output)

// These are common pins between breakout and shield
#define CARDCS 4     // Card chip select pin
// DREQ should be an Int pin, see http://arduino.cc/en/Reference/attachInterrupt
#define DREQ 3       // VS1053 Data request, ideally an Interrupt pin

Adafruit_VS1053_FilePlayer musicPlayer = 
  // create breakout-example object!
  //Adafruit_VS1053_FilePlayer(BREAKOUT_RESET, BREAKOUT_CS, BREAKOUT_DCS, DREQ, CARDCS);
  // create shield-example object!
  Adafruit_VS1053_FilePlayer(SHIELD_RESET, SHIELD_CS, SHIELD_DCS, DREQ, CARDCS);

  char myFile[3] = "0";


  
void setup()
{
  Serial.begin(9600);
  pinMode(comPin,INPUT); //Communication pin from lighting Arduino (needs grounded)
  Serial.println("Adafruit VS1053 Simple Test");
   musicPlayer.begin();  // initialise the music player
   musicPlayer.useInterrupt(VS1053_FILEPLAYER_PIN_INT);
   musicPlayer.setVolume(20,20);

  Serial.println(F("VS1053 found"));
  
  if (!SD.begin(CARDCS))
    {
    Serial.println(F("SD failed, or not present"));
    while (1);  // don't do anything more
    }
}

void loop() 
{
    char myFile[7];
    comState = digitalRead(comPin);
    if (comState != lastComState)
      {
      Serial.println(comState);
      Serial.println(lastComState);
       if (comState == LOW)
          {
          musicPlayer.stopPlaying();
          lastComState = comState;
          delay(500);
          }
      if (comState == HIGH)
         {
          Serial.println(F("Playing cabinet track"));
          sprintf(myFile, "%d.MP3", random(81,99));
          Serial.println(myFile);
          musicPlayer.startPlayingFile(myFile);
          lastComState = comState;
          delay(500);
          }
       delay(250);   
      }
      
}    

Locked
Please be positive and constructive with your questions and comments.

Return to “Arduino Shields from Adafruit”