Go Down

Topic: Problems connecting FN-M16P Mp3 module to Arduino UNO (Read 260 times) previous topic - next topic

Thierry_77901

Hello,

I'm trying to do a setup that should be used in a gadget geocache but it doesn't work exactly as i want it to. Maybe someone here can give a good advice on how to accomplish the task...

Hardware used:
-Arduino UNO
-MFRC522 RFID reader (
-FN-M16P embedded MP3 audio module (http://www.flyrontech.com/uploadfile/download/2016441645109830.pd
-YWRobot LCM1602 IIC LCD module

What it is supposed to do:
*Upon startup, it should show a message on the LCD screen (let's say to present a card to the RFID reader) and play a music file in a loop (file mp3(1) ).

As soon as a correct card is presented to the reader, it should play a different file ( mp3(3)) for a short time and return to the initial prompt on the screen and the mp3(1) should play again continously (in a loop).

What it actually does:
*Upon startup it prompts the message but DOESN'T play the file.
When a correct card is presented to the reader it PLAYS the file it should.
So everything works fine except the sound that should play continously while the reader waits for a card.

Here is the code i used:
Code: [Select]

#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#include <SPI.h>                       // load Serial Peripheral Interface
#include <MFRC522.h>                   // load RFID library
#define SS_PIN 10                      // define SDA Pin
#define RST_PIN 9                      // define RESET Pin


LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address
char buf[12];


MFRC522 mfrc522(SS_PIN, RST_PIN);


int buusyPin = 3;// buusyPin = 3; // sound player busy
int bsy = 0;
int z=0;

void setup () {

  Serial.begin (9600);
  // 30 good for unpowered speaker - requires power off to reset volume
  lcd.begin (16,2);
  lcd.backlight();
  lcd.clear();                         
  lcd.setCursor(0,0);                 
  lcd.print("Please present");           
  lcd.setCursor(0,1);
  lcd.print("your badge");

  SPI.begin();                         // Initializes the SPI-Bus SCK , MOSI and SS on output.
  mfrc522.PCD_Init();

  mp3_set_serial (Serial);  //set Serial for DFPlayer-mini mp3 module
  mp3_reset();
  delay (400);
  mp3_set_volume (20);          // 15 is low for unpowered speaker
  delay (400); 


  delay(1000); // may be needed for initialization of sound
   
}

void loop () {   
 

   mp3_play(1);
 
 

  if ( ! mfrc522.PICC_IsNewCardPresent()) { return; }
  if ( ! mfrc522.PICC_ReadCardSerial()) { return; }
       long code=0;
       for (byte i = 0; i < mfrc522.uid.size; i++) {
        code=((code+mfrc522.uid.uidByte[i])*10); }
       
         for (int i=0; i<1; i++){
         if(code == 1962220) {            // enter here the RFID Code of the tag
          lcd.clear();
          lcd.setCursor(0,0); 
          lcd.print("Kaart");
          lcd.setCursor(0,1);
          lcd.print("1");
          mp3_play(3); 
          delay(10000);                   

         
          }
         else if (code == 289400){
                             
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Kaart ");
        lcd.setCursor(0,1);
        lcd.print("2");
        mp3_play(3);
        delay(10000);
        }
        else if (code == 2235100){
                             
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Card");
        lcd.setCursor(0,1);
        lcd.print("3");
         mp3_play(3);
        delay(10000);
        }
        else if (code == 2436710){
                             
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Card");
        lcd.setCursor(0,1);
        lcd.print("4");
        mp3_play(3);
        delay(10000);
        }
        else if (code == 2365100){
                             
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Card");
        lcd.setCursor(0,1);
        lcd.print("5");
         mp3_play(3);
        delay(10000);
        }
        else if (code == 1886680){
                             
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Card");
        lcd.setCursor(0,1);
        lcd.print("6");
        mp3_play(3);
        delay(10000);
        }
         else {
     
    lcd.clear();         
    lcd.setCursor(0,0);
    lcd.print("ID not correct");
    lcd.setCursor(0,1);
    lcd.print("No entry");
        mp3_play(1);
    for (int i= 1; i<5 ; i++)

    delay(1000);
         }
          lcd.clear();                 
          lcd.setCursor(0,0);         
          lcd.print("Please present");
          lcd.setCursor(0,1);
          lcd.print("your badge"); 
          mp3_play(1);
                                       
        }
     
}



Thanks in advance for your answers!
Thierry

chivas

Hello,

i added some lines into your code so that it shall work as you want:


Code: [Select]

#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#include <SPI.h>                       // load Serial Peripheral Interface
#include <MFRC522.h>                   // load RFID library
#define SS_PIN 10                      // define SDA Pin
#define RST_PIN 9                      // define RESET Pin


LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address
char buf[12];


MFRC522 mfrc522(SS_PIN, RST_PIN);


int buusyPin = 3;// buusyPin = 3; // sound player busy
int bsy = 0;
int z=0;
int loopmode = 1;

void setup () {

  Serial.begin (9600);
  // 30 good for unpowered speaker - requires power off to reset volume
  lcd.begin (16,2);
  lcd.backlight();
  lcd.clear();                         
  lcd.setCursor(0,0);                 
  lcd.print("Please present");           
  lcd.setCursor(0,1);
  lcd.print("your badge");

  SPI.begin();                         // Initializes the SPI-Bus SCK , MOSI and SS on output.
  mfrc522.PCD_Init();

  mp3_set_serial (Serial);  //set Serial for DFPlayer-mini mp3 module
  mp3_reset();
  delay (400);
  mp3_set_volume (20);          // 15 is low for unpowered speaker
  delay (400); 


  delay(1000); // may be needed for initialization of sound
   
}

void loop () {   
 
   if (loopmode == 1)
   { loopmode =0;
     mp3_single_loop(TRUE);
     mp3_play(1);
    }
 

  if ( ! mfrc522.PICC_IsNewCardPresent()) { return; }
  if ( ! mfrc522.PICC_ReadCardSerial()) { return; }
       long code=0;
       for (byte i = 0; i < mfrc522.uid.size; i++) {
        code=((code+mfrc522.uid.uidByte[i])*10); }
       
         for (int i=0; i<1; i++){
         if(code == 1962220) {            // enter here the RFID Code of the tag
          lcd.clear();
          lcd.setCursor(0,0); 
          lcd.print("Kaart");
          lcd.setCursor(0,1);
          lcd.print("1");
          mp3_single_loop(FALSE);
          mp3_play(3); 
          loopmode =1;
          delay(10000);                   

         
          }
         else if (code == 289400){
                             
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Kaart ");
        lcd.setCursor(0,1);
        lcd.print("2");
        mp3_single_loop(FALSE);
        mp3_play(3);
        loopmode =1;
        delay(10000);
        }
        else if (code == 2235100){
                             
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Card");
        lcd.setCursor(0,1);
        lcd.print("3");
        mp3_single_loop(FALSE);
        loopmode =1;
        mp3_play(3);
        delay(10000);
        }
        else if (code == 2436710){
                             
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Card");
        lcd.setCursor(0,1);
        lcd.print("4");
        loopmode =1;
        mp3_single_loop(FALSE);
        mp3_play(3);
        delay(10000);
        }
        else if (code == 2365100){
                             
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Card");
        lcd.setCursor(0,1);
        lcd.print("5");
        loopmode =1;
        mp3_single_loop(FALSE); 
        mp3_play(3);
        delay(10000);
        }
        else if (code == 1886680){
                             
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Card");
        lcd.setCursor(0,1);
        lcd.print("6");
        loopmode =1;
        mp3_single_loop(FALSE);
        mp3_play(3);
        delay(10000);
        }
         else {
     
    lcd.clear();         
    lcd.setCursor(0,0);
    lcd.print("ID not correct");
    lcd.setCursor(0,1);
    lcd.print("No entry");

    delay(5000);
         }
          lcd.clear();                 
          lcd.setCursor(0,0);         
          lcd.print("Please present");
          lcd.setCursor(0,1);
          lcd.print("your badge"); 

                                       
        }
     
}



Anyhow, I suggest to try/use following structure with switch case. I made some minor changes at the last few lines. I don't have all of your libaries so I was not able to verify the syntax.

Code: [Select]


#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#include <SPI.h>                       // load Serial Peripheral Interface
#include <MFRC522.h>                   // load RFID library
#define SS_PIN 10                      // define SDA Pin
#define RST_PIN 9                      // define RESET Pin


LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address
char buf[12];


MFRC522 mfrc522(SS_PIN, RST_PIN);


int buusyPin = 3;// buusyPin = 3; // sound player busy
int bsy = 0;
int z=0;
int loopmode = 1;

void setup () {

  Serial.begin (9600);
  // 30 good for unpowered speaker - requires power off to reset volume
  lcd.begin (16,2);
  lcd.backlight();
  lcd.clear();                         
  lcd.setCursor(0,0);                 
  lcd.print("Please present");           
  lcd.setCursor(0,1);
  lcd.print("your badge");

  SPI.begin();                         // Initializes the SPI-Bus SCK , MOSI and SS on output.
  mfrc522.PCD_Init();

  mp3_set_serial (Serial);  //set Serial for DFPlayer-mini mp3 module
  mp3_reset();
  delay (400);
  mp3_set_volume (20);          // 15 is low for unpowered speaker
  delay (400); 


  delay(1000); // may be needed for initialization of sound
   
}

void loop ()
 {   
 
   if (loopmode == 1)
    { loopmode =0;
      mp3_single_loop(TRUE);
      mp3_play(1);
    }
 

  if ( ! mfrc522.PICC_IsNewCardPresent())
     { return; }
  if ( ! mfrc522.PICC_ReadCardSerial())
     { return; }
  long code=0;
  for (byte i = 0; i < mfrc522.uid.size; i++)
   {
    code=((code+mfrc522.uid.uidByte[i])*10);
   }

   switch (code)
    {
      case 1962220:     // enter here the RFID Code of the tag
          lcd.clear();
          lcd.setCursor(0,0); 
          lcd.print("Kaart");
          lcd.setCursor(0,1);
          lcd.print("1");
          mp3_single_loop(FALSE);
          mp3_play(3); 
          loopmode =1;
          delay(10000); 
          break;

       case 289400:
          lcd.clear();
          lcd.setCursor(0,0);
          lcd.print("Kaart ");
          lcd.setCursor(0,1);
          lcd.print("2");
          mp3_single_loop(FALSE);
          mp3_play(3);
          loopmode =1;
          delay(10000);
          break;

      case 2235100:
          lcd.clear();
          lcd.setCursor(0,0);
          lcd.print("Card");
          lcd.setCursor(0,1);
          lcd.print("3");
          mp3_single_loop(FALSE);
          loopmode =1;
          mp3_play(3);
          delay(10000);
          break;

      case 2436710:
          lcd.clear();
          lcd.setCursor(0,0);
          lcd.print("Card");
          lcd.setCursor(0,1);
          lcd.print("4");
          loopmode =1;
          mp3_single_loop(FALSE);
          mp3_play(3);
          delay(10000);
          break;
       
      case 2365100:
          lcd.clear();
          lcd.setCursor(0,0);
          lcd.print("Card");
          lcd.setCursor(0,1);
          lcd.print("5");
          loopmode =1;
          mp3_single_loop(FALSE); 
          mp3_play(3);
          delay(10000);     
          break;
 
      case 1886680:
          lcd.clear();
          lcd.setCursor(0,0);
          lcd.print("Card");
          lcd.setCursor(0,1);
          lcd.print("6");
          loopmode =1;
          mp3_single_loop(FALSE);
          mp3_play(3);
          delay(10000);
          break;

       default:
          lcd.clear();         
          lcd.setCursor(0,0);
          lcd.print("ID not correct");
          lcd.setCursor(0,1);
          lcd.print("No entry");
          delay(5000);
          lcd.clear();                 
          lcd.setCursor(0,0);         
          lcd.print("Please present");
          lcd.setCursor(0,1);
          lcd.print("your badge"); 
    }
         
       
 }



I would appreciate if you can your geocache GC ID or the link to that  :)

Regards,
chivas


Go Up