#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
#include <Wire.h>
#include <Adafruit_Si4713.h>

#define RESETPIN 12        // FM Transmitter RST pin
#define FMSTATION 10230    // 102.30 MHz FM

Adafruit_Si4713 radio = Adafruit_Si4713(RESETPIN);
SoftwareSerial mySoftwareSerial(10, 11); // RX, TX pins to MP3 Player
DFRobotDFPlayerMini myDFPlayer;

void setup()
{
  Serial.begin(9600);
  Serial.println("Si4713 Radio Transmitter Test");

  radio.reset();
  if (! radio.begin()) {  
    Serial.println("Si4713 Transmitter Not Found");
    while (1);
  }
  radio.setTXpower(115);  //Set FM Transmit power dBuV, 88...115

  Serial.print("\nTransmitting on "); 
  Serial.print(FMSTATION/100); 
  Serial.print('.'); 
  Serial.println(FMSTATION % 100);
  radio.tuneFM(FMSTATION); 

  // Show Radio Transmitter Status
  radio.readTuneStatus();
  Serial.print("\tCurr freq: "); 
  Serial.println(radio.currFreq);
  Serial.print("\tCurr freqdBuV:"); 
  Serial.println(radio.currdBuV);
  Serial.print("\tCurr ANTcap:"); 
  Serial.println(radio.currAntCap);

  // begin the RDS/RDBS transmission
  radio.beginRDS();
  radio.setRDSstation("Hacker Radio");
  radio.setRDSbuffer("Hack the Planet");
  Serial.println("RDS on."); 

  mySoftwareSerial.begin(9600);
  Serial.println(F("Initializing MP3 Player..."));
  
  if (!myDFPlayer.begin(mySoftwareSerial)) {  
    Serial.println(F("Unable to start MP3Player."));  //check wiring and SD card
    while(true){
      delay(0); // Code to compatible with ESP8266 watch dog.
    }
  }
  Serial.println(F("MP3 Player Ready."));
  myDFPlayer.volume(30);  //Set volume value (0...30)
  myDFPlayer.play(1);  //Play the first mp3
}

void loop()
{
  static unsigned long timer = millis();
  
  if (millis() - timer > 45000) {
    timer = millis();
    myDFPlayer.next();  //Play each mp3 file for 45 seconds
  }
}
