This Is the code I am using was for nano and df mini player converting to mega and adafruit mp3 shield everything works except will not play song after number completes. the section in bold is the only section i need to work.
// Jerry Vonschriltz
// FEB 2024
// Rotary Phone Jenny
#include <SoftwareSerial.h>
#include <Bounce2.h>
//#include SPI, MP3 and SD libraries
#include <SPI.h>
#include <Adafruit_VS1053.h>
#include <SD.h>
#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 = Adafruit_VS1053_FilePlayer(SHIELD_RESET, SHIELD_CS, SHIELD_DCS, DREQ, CARDCS);
// Const
const byte hookPin = A0;
const byte dialPin = A2;
const byte numberPin = A1;
const byte ringerPins[] = {2, 3};
//const byte TxTomusicPlayer = 4;
//const byte RxFrommusicPlayer = 5;
const byte incomingCallPin = 8;
const int maxNumDigitsInPhoneNumber = 7;
// Globals
char number[maxNumDigitsInPhoneNumber + 1];
int currentDigit;
int pulseCount;
typedef enum { Idle, Dialtone, Dialling, InvalidNumber, Connecting, Connected, Ringing, Engage, Disconnected } stateType;
stateType state = Idle;
Bounce hookSwitch = Bounce();
Bounce dialSwitch = Bounce();
Bounce numberSwitch = Bounce();
Bounce incomingCallSwitch = Bounce();
//SoftwareSerial softwareSerial(RxFrommusicPlayer, TxTomusicPlayer); // RX, TX
//DFRobotDFPlayerMini dfPlayer;
unsigned long lastRingTime;
int audioFileToPlay;
void setup() {
Serial.begin (9600);
Serial.println(__FILE__);
Serial.println("Compiled: "__DATE__", " __TIME__);
pinMode(hookPin, INPUT_PULLUP);
hookSwitch.attach(hookPin);
hookSwitch.interval(5);
pinMode(dialPin, INPUT_PULLUP);
dialSwitch.attach(dialPin);
dialSwitch.interval(5);
pinMode(numberPin, INPUT_PULLUP);
numberSwitch.attach(numberPin);
numberSwitch.interval(5);
pinMode(incomingCallPin, INPUT_PULLUP);
incomingCallSwitch.attach(incomingCallPin);
incomingCallSwitch.interval(5);
for (int i = 0; i < 2; i++) {
pinMode(ringerPins[i], OUTPUT);
digitalWrite(ringerPins[i], HIGH);
}
//_________________________________________________________ MP3 SHIELD
if (! musicPlayer.begin()) { // initialise the music player
Serial.println(F("Couldn't find MP3 Shield, do you have the right pins defined?"));
while (1);
}
Serial.println(F("MP3 shield found"));
SD.begin(CARDCS);
//musicPlayer.setVolume(100,100);
// If DREQ is on an interrupt pin (on uno, #2 or #3) we can do background
// audio playing
musicPlayer.useInterrupt(VS1053_FILEPLAYER_PIN_INT); // DREQ int
// pinMode(52,OUTPUT);
// digitalWrite(52,LOW);
memset(number, 0, sizeof number);
}
void loop() {
hookSwitch.update();
dialSwitch.update();
numberSwitch.update();
incomingCallSwitch.update();
if (hookSwitch.rose()) {
Serial.println(F("Handset Replaced"));
state = Idle;
musicPlayer.stopPlaying();
memset(number, 0, sizeof number);
currentDigit = 0;
pulseCount = 0;
}
switch (state) {
case Idle:
if (hookSwitch.fell()) {
Serial.println("Receiver Lifted");
musicPlayer ;
state = Dialtone;
}
if (incomingCallSwitch.fell()) {
Serial.println("Incoming Call");
state = Ringing;
audioFileToPlay = 9;
}
break;
case Dialtone:
if(dialSwitch.fell()) {
state = Dialling;
Serial.println("Started dialling");
musicPlayer.stopPlaying();
}
break;
case Dialling:
if (numberSwitch.rose()) {
pulseCount++;
}
if (dialSwitch.rose()) {
if (pulseCount >= 10) {pulseCount = 0;}
Serial.print(pulseCount);
number[currentDigit] = pulseCount | '0' ;
currentDigit++;
if (strncmp(number, "911", 3) == 0) {
Serial.print(F(" Connecting"));
state = Connecting;
audioFileToPlay = 006;
}
**else if (strncmp(number, "8765309", 7) == 0) {**
** Serial.println(F(" Engaged"));**
** state = Engage;**
** audioFileToPlay = 8765309;**
}
else if (currentDigit == maxNumDigitsInPhoneNumber) {
Serial.println(F(" Invalid number "));
state = InvalidNumber;
// musicPlayer.playMp3Folder();
}
else {
number[currentDigit] = 0;
pulseCount = 0;
}
}
break;
case Connecting:
// musicPlayer.playMp3Folder();
delay(4000);
// musicPlayer.playMp3Folder(audioFileToPlay);
state = Connected;
break;
case Engage:
break;
case InvalidNumber:
break;
case Connected:
break;
case Ringing:
int now = millis();
if (now - lastRingTime > 4000) {
for (int j = 0; j < 2; j++) {
for (int i = 0; i < 20; i++) {
hookSwitch.update();
if (hookSwitch.fell()) {
j = 2;
break;
}
digitalWrite(ringerPins[0], i % 2);
digitalWrite(ringerPins[1], 1 - (i % 2));
delay(28);
}
delay(200);
}
digitalWrite(ringerPins[0], LOW);
digitalWrite(ringerPins[1], LOW);
lastRingTime = now;
}
if (hookSwitch.fell()) {
Serial.println("Call answered!");
state = Connected;
// dfPlayer.playMp3Folder(audioFileToPlay);
}
break;
}
}