Created
March 3, 2023 21:14
-
-
Save emilyvelasco/0ec21e3421188e9e237f6d3cf41c524f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* This sketch is heavily based on a demo code by | |
[Angelo qiao](Angelo.qiao@dfrobot.com) for DFRobot, | |
but it replaces the function that plays a new mp3 file after | |
a set period of time with a function that plays a new mp3 | |
file when triggered by an external sensor, either a PIR, | |
doppler radar, or even a button*/ | |
/*************************************************** | |
DFPlayer - A Mini MP3 Player For Arduino | |
<https://www.dfrobot.com/product-1121.html> | |
*************************************************** | |
GNU Lesser General Public License. | |
See <http://www.gnu.org/licenses/> for details. | |
All above must be included in any redistribution | |
****************************************************/ | |
/***********Notice and Trouble shooting*************** | |
1.Connection and Diagram can be found here | |
<https://www.dfrobot.com/wiki/index.php/DFPlayer_Mini_SKU:DFR0299#Connection_Diagram> | |
2.This code is tested on Arduino Uno, Leonardo, Mega boards. | |
****************************************************/ | |
#include "Arduino.h" | |
#include "SoftwareSerial.h" | |
#include "DFRobotDFPlayerMini.h" | |
int inputPin = 4; // choose the input pin (for doppler microwave (or PIR) sensor) | |
int pirState = LOW; // we start, assuming no motion detected | |
int val = 0; // variable for reading the pin status | |
int volumeLevel; | |
int gain; | |
int birdNumber = 2; | |
SoftwareSerial mySoftwareSerial(10, 11); // RX, TX | |
DFRobotDFPlayerMini myDFPlayer; | |
void printDetail(uint8_t type, int value); | |
boolean triggered = false; | |
void setup() | |
{ | |
delay(250);/*If power is applied to SD player and Arduino at the same time, | |
the Arduino will try to initialize comms with the player before the | |
player is ready. This short delay provides time for the player to get | |
booted up before comms are attempted*/ | |
mySoftwareSerial.begin(9600); | |
Serial.begin(115200); | |
Serial.println(); | |
Serial.println(F("DFRobot DFPlayer Mini Demo")); | |
Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)")); | |
if (!myDFPlayer.begin(mySoftwareSerial)) { //Use softwareSerial to communicate with mp3. | |
Serial.println(F("Unable to begin:")); | |
Serial.println(F("1.Please recheck the connection!")); | |
Serial.println(F("2.Please insert the SD card!")); | |
while(true){ | |
delay(0); // Code to compatible with ESP8266 watch dog. | |
} | |
} | |
Serial.println(F("DFPlayer Mini online.")); | |
myDFPlayer.volume(20); //Set volume value. From 0 to 30 | |
myDFPlayer.play(1); //Play the first mp3 | |
} | |
void loop() | |
{ | |
volumeLevel =analogRead(A0); //read potentiometer position for volume control | |
gain = map(volumeLevel, 0, 1023, 0, 30); //map pot value to DFPlayer volume range | |
myDFPlayer.volume(gain); //Set volume value. From 0 to 30 | |
val = digitalRead(inputPin); // read input value | |
if (val == HIGH) { //if the sensor is high | |
if (!triggered){ //and not already high | |
myDFPlayer.play(birdNumber); //Play another mp3 | |
triggered = true; | |
birdNumber = random(2,72); /*pick a random mp3 to play next. Make sure this does not | |
exceed the number of files you have*/ | |
} | |
}else{ | |
triggered = false; | |
if (pirState == HIGH){ | |
// we have just turned of | |
pirState = LOW; | |
} | |
} | |
if (myDFPlayer.available()) { | |
printDetail(myDFPlayer.readType(), myDFPlayer.read()); //Print the detail message from DFPlayer to handle different errors and states. | |
} | |
} | |
void printDetail(uint8_t type, int value){ | |
switch (type) { | |
case TimeOut: | |
Serial.println(F("Time Out!")); | |
break; | |
case WrongStack: | |
Serial.println(F("Stack Wrong!")); | |
break; | |
case DFPlayerCardInserted: | |
Serial.println(F("Card Inserted!")); | |
break; | |
case DFPlayerCardRemoved: | |
Serial.println(F("Card Removed!")); | |
break; | |
case DFPlayerCardOnline: | |
Serial.println(F("Card Online!")); | |
break; | |
case DFPlayerUSBInserted: | |
Serial.println("USB Inserted!"); | |
break; | |
case DFPlayerUSBRemoved: | |
Serial.println("USB Removed!"); | |
break; | |
case DFPlayerPlayFinished: | |
Serial.print(F("Number:")); | |
Serial.print(value); | |
Serial.println(F(" Play Finished!")); | |
break; | |
case DFPlayerError: | |
Serial.print(F("DFPlayerError:")); | |
switch (value) { | |
case Busy: | |
Serial.println(F("Card not found")); | |
break; | |
case Sleeping: | |
Serial.println(F("Sleeping")); | |
break; | |
case SerialWrongStack: | |
Serial.println(F("Get Wrong Stack")); | |
break; | |
case CheckSumNotMatch: | |
Serial.println(F("Check Sum Not Match")); | |
break; | |
case FileIndexOut: | |
Serial.println(F("File Index Out of Bound")); | |
break; | |
case FileMismatch: | |
Serial.println(F("Cannot Find File")); | |
break; | |
case Advertise: | |
Serial.println(F("In Advertise")); | |
break; | |
default: | |
break; | |
} | |
break; | |
default: | |
break; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment