Atmega328P with grove mp3 player

I don't have the schematic diagram currently, but it is basically base on "Crystal ball" example
and then i add a led,lcd,mp3 playerand distance sensor

led lcd and distance sensor is working with atmega328
only mp3 player not able to function

Here is my code :

/*
LiquidCrystal Library - Hello World

Demonstrates the use a 16x2 LCD display. The LiquidCrystal
library works with all LCD displays that are compatible with the
Hitachi HD44780 driver. There are many of them out there, and you
can usually tell them by the 16-pin interface.

This sketch prints "Hello World!" to the LCD
and shows the time.

The circuit:

  • LCD RS pin to digital pin 12
  • LCD Enable pin to digital pin 11
  • LCD D4 pin to digital pin 5
  • LCD D5 pin to digital pin 4
  • LCD D6 pin to digital pin 3
  • LCD D7 pin to digital pin 2
  • LCD R/W pin to ground
  • 10K resistor:
  • ends to +5V and ground
  • wiper to LCD VO pin (pin 3)

Library originally added 18 Apr 2008
by David A. Mellis
library modified 5 Jul 2009
by Limor Fried (http://www.ladyada.net)
example added 9 Jul 2009
by Tom Igoe
modified 22 Nov 2010
by Tom Igoe

This example code is in the public domain.

*/

// include the library code:
#include <LiquidCrystal.h>
#include <SoftwareSerial.h>
int buttonPushCounter = 0; // counter for the number of button presses
int buttonState5 = 0; // current state of the button
int lastButtonState = 0; // previous state of the button
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
SoftwareSerial mp3(9, 10);

void setup()
{
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("No.of Push Ups");
pinMode(14,INPUT);// DISTANCE SENSOR
mp3.begin(9600);
Serial.begin(9600);
//delay(100);
pinMode(6,OUTPUT); //LED
}
void loop() {
unsigned long currentMillis = millis();
if(currentMillis<=60000){
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(0, 1);
// print the number of seconds since reset:
//lcd.print(millis()/1000);
buttonState5=digitalRead(14);
if(buttonState5 != lastButtonState);
{
if(buttonState5==LOW)
{
buttonPushCounter++;
lcd.print(buttonPushCounter);
delay(1000);
SetPlayMode(0x00);
//delay(50);
playNextSong();
//delay(50);
}
SetVolume(0x1F);
}
}
if(currentMillis>50000 && currentMillis<60000)
{
digitalWrite(6,HIGH);
lcd.setCursor(8, 1);
lcd.print("10s left");
lcd.noDisplay();
delay(500);
lcd.display();
delay(500);
}
if(currentMillis>60000)
{
digitalWrite(6,LOW);
lcd.setCursor(7, 1);
lcd.print("time's up");
SetMusicPlay(00,81);
delay(5000);
}
}
boolean SetVolume(uint8_t volume)
{
mp3.write(0x7E);
mp3.write(0x03);
mp3.write(0xA7);
mp3.write(volume);
mp3.write(0x7E);
//delay(10);
while(mp3.available())
{
if (0xA7==mp3.read())
return true;
else
return false;
}
}

boolean SetPlayMode(uint8_t playmode)
{
if (((playmode==0x00)|(playmode==0x01)|(playmode==0x02)|(playmode==0x03))==false)
{
Serial.println("PlayMode Parameter Error! ");
return false;
}
mp3.write(0x7E);
mp3.write(0x03);
mp3.write(0xA9);
mp3.write(playmode);
mp3.write(0x7E);
//delay(10);
while(mp3.available())
{
if (0xA9==mp3.read())
return true;
else
return false;
}
}
boolean SetMusicPlay(uint8_t hbyte,uint8_t lbyte)
{
mp3.write(0x7E);
mp3.write(0x04);
mp3.write(0xA0);
mp3.write(hbyte);
mp3.write(lbyte);
mp3.write(0x7E);
delay(10);
while(mp3.available())
{
if (0xA0==mp3.read())
return true;
else
return false;
}
}
void writeToMP3(byte MsgLEN, byte A, byte B, byte C, byte D, byte E, byte F){
byte codeMsg[] = {MsgLEN, A,B,C,D,E,F};
mp3.write(0x7E); //Start Code for every command = 0x7E
for(byte i = 0; i<MsgLEN+1; i++){
mp3.write(codeMsg*); //Send the rest of the command to the GROVE MP3 player*

  • }*
    }
    void playNextSong(){ // Play the next song
  • writeToMP3(0x02, 0xA5, 0x7E, 0x00, 0x00, 0x00, 0x00);*
    }