Hay que cambiar el codigo de cada tarjeta.
//sacosta.org
//cada una de las Tarjetas registradas hace sonar el sonido asociado o una función: next, previous, pause, start.....
//hemos cambiado delay por millis()
//ampliado número de Tarjetas
//Tarjeta 211 para(pausa) la reproducción de un sonido.
//Tarjeta 212 reinicia la reproducción despues de la pausa (start)
//Tarjeta 213 reproduce el sonido siguiente al último reproducido o en reproducción(PREVIOUS)
//Tarjeta 214 reproduce el sonido anterior al último reproducido o en reproducción(NEXT)
//Tarjeta 215 FIJA A UN VALOR DETERMINADO EL VOLUMEN 0-30 Baja volumen a un valor determinado
//Tarjeta 216 FIJA A UN VALOR DETERMINADO EL VOLUMEN 0-30 Sube volumen a un valor determinado
//Pueden hacerse 4 tarjetas: muy bajo, bajo, alto, muy alto
//he cambiado el modo lectura para facilitar la introducción de los códigos de las tarjetas
//Muestra por LCD (2004: 20 columnas y 4 filas) canción y tarjeta
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
#include "SPI.h"
#include <MFRC522.h>
#include <MFRC522Extended.h>
//Connexiones LCD (20 04) I2C a Arduino
//SDA a A4 de arduino uno o arduino nano
//SCL a A5 de arduino uno o arduino nano
// Define pines modulo RFID RC522
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);
MFRC522::MIFARE_Key key;
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4); // 0x27 es el código del tipo de LCD, 27 es la dirección por defecto. 20 es el numero de columnas y 4 de las filas
int tarjeta;//variable con la que asociaremos un código de tarjeta a un número
String sonido;//variable para dar nombre a la reproducción o a la función de la tarjeta
String archivo="RFID_MP3_LCD.INO";//nombre del programa arduino que aparecerá en la pantalla
char st[20];
// Define pines modulo DFPlayer Mini
SoftwareSerial mySoftwareSerial(5, 6); // Pin RX del MP3 pasanado por la resistencia va a D6,Pin TX va a D5
DFRobotDFPlayerMini myDFPlayer;
String strID = "";
unsigned long TiempoAhora = 0;//variable utilizada para captar el valor de millis() en un momento dado
const int TIME = 1000; //tiempo para fijar un "delay".
void setup()
{
lcd.init();
//Pone en marcha el LCD
lcd.backlight();
//Pone en marcha la luz de fondo del LCD
//Comunicación serial con el modulo MP3
mySoftwareSerial.begin(9600);
// Inicia serial
Serial.begin(9600);
// Inicia SPI bus
SPI.begin();
// Inicia mfrc522
mfrc522.PCD_Init();
// Mensajes iniciales en monitor serie
Serial.println();
Serial.println(F("DFRobot DFPlayer Mini"));
Serial.println(F("Inicializando módulo DFPlayer... (3~5 segundos)"));
//Mensajes iniciales en el LCD
lcd.setCursor(0, 0);
lcd.print(archivo);
lcd.setCursor(0, 1);
lcd.print("DFRobot DFPlayerMini");
lcd.setCursor(0, 2);
lcd.print("sacosta.org");
lcd.setCursor(0, 3);
lcd.print("Inicializando...");
if (!myDFPlayer.begin(mySoftwareSerial))//si no se inicializa
{
Serial.println(F("No inicializado:"));
Serial.println(F("1.Chequee las conexiones del DFPlayer Mini"));
Serial.println(F("2.Inserte la Tarjeta SD"));
lcd.clear();
lcd.setCursor(0, 0); //
lcd.print("No inicializado:");
lcd.setCursor(0, 1);
lcd.print("Revise conexiones");
lcd.setCursor(0, 2);
lcd.print("del DFPlayer Mini");
lcd.setCursor(0, 3);
lcd.print("Inserte la TarjetaSD");
while (true);
}
Serial.println();
Serial.println(F("Módulo DFPlayer Mini inicializado!"));
myDFPlayer.setTimeOut(500); //Timeout serial 500ms
myDFPlayer.volume(30); //Set volume value (0~30).
myDFPlayer.EQ(0); //Equalización normal
Serial.println("Acerca tu Tarjeta Acerca tu Tarjeta...");
Serial.println();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(archivo);
lcd.setCursor(0, 1);
lcd.print("DFPlayer Mini OK");
lcd.setCursor(0, 2);
lcd.print("Acerca tu Tarjeta");
lcd.setCursor(0, 3);
lcd.print("al lector RFID");
}
void loop()
{
// En espera de Tarjeta
if ( ! mfrc522.PICC_IsNewCardPresent()|| !mfrc522.PICC_ReadCardSerial())
{
return;
}
MFRC522::PICC_Type piccType = mfrc522.PICC_GetType(mfrc522.uid.sak);//analitza el tipus de tarja
if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&
piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
Serial.println(F("Your tag is not of type MIFARE Classic."));
return;
//si no és una Mifare classics vuelve a empezar el loop
}
strID = "";
for (byte i = 0; i < 4; i++) {
strID +=
(mfrc522.uid.uidByte[i] < 0x10 ? "0" : "") +
String(mfrc522.uid.uidByte[i], HEX) +
(i != 3 ? ":" : "");
}
strID.toUpperCase();
if (validateCard(strID)) {
Serial.print("*** El ID de tu tarjeta es: ");
Serial.println(strID);
Serial.print("");
lcd.clear();
lcd.setCursor(0, 0); //
lcd.print(tarjeta);
lcd.setCursor(0, 1);
lcd.print(strID);
lcd.setCursor(0, 2);
lcd.print("");
lcd.setCursor(0, 3);
lcd.print("");
//función de las tarjetas, condicionada a variable tarjeta
if(tarjeta==1){
Serial.println("Tarjeta - Acesso liberado!!");
Serial.println(tarjeta);
Serial.println(sonido);
print_lcd();
myDFPlayer.play(1);
}
if(tarjeta==2){
Serial.println("Tarjeta - Acesso liberado!!");
Serial.println(tarjeta);
Serial.println(sonido);
print_lcd();
myDFPlayer.play(2);
}
if(tarjeta==3){
Serial.println("Tarjeta - Acesso liberado!!");
Serial.println(tarjeta);
Serial.println(sonido);
print_lcd();
myDFPlayer.play(3);
}
if(tarjeta==4){
Serial.println("Tarjeta - Acesso liberado!!");
Serial.println(tarjeta);
Serial.println(sonido);
print_lcd();
myDFPlayer.play(4);
}
if(tarjeta==5){
Serial.println("Tarjeta - Acesso liberado!!");
Serial.println(tarjeta);
Serial.println(sonido);
print_lcd();
myDFPlayer.play(5);
}
if(tarjeta==6){
Serial.println("Tarjeta - Acesso liberado!!");
Serial.println(tarjeta);
Serial.println(sonido);
print_lcd();
myDFPlayer.play(6);
}
if(tarjeta==7){
Serial.println("Tarjeta - Acesso liberado!!");
Serial.println(tarjeta);
Serial.println(sonido);
print_lcd();
myDFPlayer.play(7);
}
if(tarjeta==8){
Serial.println("Tarjeta - Acesso liberado!!");
Serial.println(tarjeta);
Serial.println(sonido);
print_lcd();
myDFPlayer.play(8);
}
if(tarjeta==9){
Serial.println("Tarjeta - Acesso liberado!!");
Serial.println(tarjeta);
Serial.println(sonido);
print_lcd();
myDFPlayer.play(9);
}
if(tarjeta==10){
Serial.println("Tarjeta - Acesso liberado!!");
Serial.println(tarjeta);
Serial.println(sonido);
print_lcd();
myDFPlayer.play(10);
}
// para añadir más canciones///////////////////////////////////////////
// copiar este codigo y cambiar el numero de orden
/*
if(tarjeta==10){
Serial.println("Tarjeta - Acesso liberado!!");
Serial.println(tarjeta);
Serial.println(sonido);
print_lcd();
myDFPlayer.play(10);
}
*/
///////////////////////////////////////////////////////////////////////
//las siguientes tarjetas son las de función: Next, Previous, Pause, Volumen, etc.
if(tarjeta==211){
Serial.println("Tarjeta - Acesso liberado!!");
Serial.println(tarjeta);
Serial.println(sonido);
print_lcd();
myDFPlayer.pause(); //Pause the mp3
}
if(tarjeta==212){
Serial.println("Tarjeta - Acesso liberado!!");
Serial.println(tarjeta);
Serial.println(sonido);
print_lcd();
myDFPlayer.start(); // Play
}
if(tarjeta==213){
Serial.println("Tarjeta - Acesso liberado!!");
Serial.println(tarjeta);
Serial.println(sonido);
print_lcd();
myDFPlayer.next(); //Next mp3
}
if(tarjeta==214){
Serial.println("Tarjeta - Acesso liberado!!");
Serial.println(tarjeta);
Serial.println(sonido);
print_lcd();
myDFPlayer.previous(); //Previous mp3
}
if(tarjeta==215){
Serial.println("Tarjeta - Acesso liberado!!");
Serial.println(tarjeta);
Serial.println(sonido);
print_lcd();
myDFPlayer.volume(20); //Volumen a 20
}
if(tarjeta==216){
Serial.println("Tarjeta - Acesso liberado!!");
Serial.println(tarjeta);
Serial.println(sonido);
print_lcd();
myDFPlayer.volume(30);//Volumen a 30
}
//delay(1000);
TiempoAhora = millis();
while(millis() < TiempoAhora+TIME){
}
}}
bool validateCard(String usercard) {
// ID de las tarjetas y variables que incorpora
//////////////////////////TARJETAS USUARIO 1
//Estos códigos son los códigos de un juego de tarjetas
//Esta pensado para ser utilizado por dos usuarios con diferentes tarjetas.
if(usercard.indexOf("55:58:34:21") >= 0) { //tarjeta 1 Usuario 1
sonido="";
tarjeta=1;
sonido="PLOU I FA SOL";//a rellenar nombre sonido o función. Pueden dejarse sólo las comillas
return true;
}
else if(usercard.indexOf("24:42:A7:2B")>= 0) {//tarjeta 2 Usuario 1
sonido="";//No tocar. sirve para borrar anterior nombre
tarjeta=2;
sonido="LA MOSCA";//a rellenar nombre sonido o función
return true;
}
else if(usercard.indexOf("FB:A8:4D:AC") >= 0) {//tarjeta 3 Usuario 1
sonido="";
tarjeta=3;
sonido="PETITA GRANOTETA";//a rellenar nombre sonido o función
return true;
}
else if(usercard.indexOf("55:7C:36:21") >= 0) {//tarjeta 4 Usuario 1
sonido="";
tarjeta=4;
sonido="LA LLUNA";//a rellenar nombre sonido o función
return true;
}
else if(usercard.indexOf("55:1E:74:21") >= 0) {//tarjeta 5 Usuario 1
sonido="";
tarjeta=5;
sonido="ESQUIROL";//a rellenar nombre sonido o función
return true;
}
else if(usercard.indexOf("55:0B:3F:21") >= 0) {//tarjeta 6 Usuario 1
sonido="";
tarjeta=6;
sonido="EL LLEO";//a rellenar nombre sonido o función
return true;
}
else if(usercard.indexOf("55:CA:54:21") >= 0) {//tarjeta 7 Usuario 1
sonido="";
tarjeta=7;
sonido="EL GALL I LA GALLINA";//a rellenar nombre sonido o función
return true;
}
else if(usercard.indexOf("F2:C9:A6:2C") >= 0) {//tarjeta 8 Usuario 1
sonido="";
tarjeta=8;
sonido="CARAGOL";//a rellenar nombre sonido o función
return true;
}
else if(usercard.indexOf("55:D9:8B:21") >= 0) {//tarjeta 9 Usuario 1
sonido="";
tarjeta=9;
sonido="PLOU I FA SOL";//a rellenar nombre sonido o función
return true;
}
else if(usercard.indexOf("00:B0:BF:2A") >= 0) {//tarjeta 10 Usuario 1
sonido="";
tarjeta=10;
sonido="LA MOSCA";//a rellenar nombre sonido o función
return true;
}
else if(usercard.indexOf("3C:EA:16:DF") >= 0) {//tarjeta 211 Usuario 1
sonido="";
tarjeta=211;
sonido="Pause";//a rellenar nombre sonido o función
return true;
}
else if(usercard.indexOf("F2:C5:B3:2C") >= 0) {//tarjeta 212 Usuario 1
sonido="";
tarjeta=212;
sonido="Play";//a rellenar nombre sonido o función
return true;
}
else if(usercard.indexOf("19:3D:13:8F") >= 0) {//tarjeta 213 Usuario 1
sonido="";
tarjeta=213;
sonido="Next";//a rellenar nombre sonido o función
return true;
}
else if(usercard.indexOf("2B:1B:4F:AC") >= 0) {//tarjeta 214 Usuario 1
sonido="";
tarjeta=214;
sonido="Previous";//a rellenar nombre sonido o función
return true;
}
else if(usercard.indexOf("B3:A1:3A:0B") >= 0) {//tarjeta 215 Usuario 1
sonido="";
tarjeta=215;
sonido="Volumen Bajo";//a rellenar nombre sonido o función
return true;
}
else if(usercard.indexOf("A9:91:15:8F") >= 0) {//tarjeta 216 Usuario 1
sonido="";
tarjeta=216;
sonido="Volumen Alto";//a rellenar nombre sonido o función
return true;
}
//////////////////////////TARJETAS USUARIO 2
//NO ANULAR LAS TARJETAS DEL OTRO USUARIO,
//si se anulan las tarjetas de usuario 1, debe cambiarse el else if de la tarjeta 1 por if
else if(usercard.indexOf("55:58:34:21") >= 0) { //tarjeta 1 Usuario 2
sonido="";
tarjeta=1;
sonido="Imagine";//a rellenar nombre sonido o función. Pueden dejarse sólo las comillas
return true;
}
else if(usercard.indexOf("03:E6:AD:38")>= 0) {//tarjeta 2 Usuario 2
sonido="";//No tocar. sirve para borrar anterior nombre
tarjeta=2;
sonido="Sonido 2";//a rellenar nombre sonido o función
return true;
}
else if(usercard.indexOf("FB:A8:4D:AC") >= 0) {//tarjeta 3 Usuario 2
sonido="";
tarjeta=3;
sonido="Sonido 3";//a rellenar nombre sonido o función
return true;
}
else if(usercard.indexOf("55:7C:36:21") >= 0) {//tarjeta 4 Usuario 2
sonido="";
tarjeta=4;
sonido="Sonido 4";//a rellenar nombre sonido o función
return true;
}
else if(usercard.indexOf("55:1E:74:21") >= 0) {//tarjeta 5 Usuario 2
sonido="";
tarjeta=5;
sonido="Sonido 5";//a rellenar nombre sonido o función
return true;
}
else if(usercard.indexOf("55:0B:3F:21") >= 0) {//tarjeta 6 Usuario 2
sonido="";
tarjeta=6;
sonido="Sonido 6";//a rellenar nombre sonido o función
return true;
}
if(usercard.indexOf("55:CA:54:21") >= 0) {//tarjeta 7 Usuario 2
sonido="";
tarjeta=7;
sonido="Sonido 7";//a rellenar nombre sonido o función
return true;
}
else if(usercard.indexOf("F2:C9:A6:2C") >= 0) {//tarjeta 8 Usuario 2
sonido="";
tarjeta=8;
sonido="Sonido 8";//a rellenar nombre sonido o función
return true;
}
else if(usercard.indexOf("55:D9:8B:21") >= 0) {//tarjeta 9 Usuario 2
sonido="";
tarjeta=9;
sonido="Sonido 9";//a rellenar nombre sonido o función
return true;
}
else if(usercard.indexOf("00:B0:BF:2A") >= 0) {//tarjeta 10 Usuario 2
sonido="";
tarjeta=10;
sonido="Sonido 10";//a rellenar nombre sonido o función
return true;
}
else if(usercard.indexOf("3C:EA:16:DF") >= 0) {//tarjeta 211 Usuario 2
sonido="";
tarjeta=211;
sonido="Pause";//a rellenar nombre sonido o función
return true;
}
else if(usercard.indexOf("F2:C5:B3:2C") >= 0) {//tarjeta 212 Usuario 2
sonido="";
tarjeta=212;
sonido="Play";//a rellenar nombre sonido o función
return true;
}
else if(usercard.indexOf("19:3D:13:8F") >= 0) {//tarjeta 213 Usuario 2
sonido="";
tarjeta=213;
sonido="Next";//a rellenar nombre sonido o función
return true;
}
else if(usercard.indexOf("2B:1B:4F:AC") >= 0) {//tarjeta 214 Usuario 2
sonido="";
tarjeta=214;
sonido="Previous";//a rellenar nombre sonido o función
return true;
}
else if(usercard.indexOf("B3:A1:3A:0B") >= 0) {//tarjeta 215 Usuario 2
sonido="";
tarjeta=215;
sonido="Volumen Bajo";//a rellenar nombre sonido o función
return true;
}
else if(usercard.indexOf("A9:91:15:8F") >= 0) {//tarjeta 16 Usuario 2
sonido="";
tarjeta=216;
sonido="Volumen Alto";//a rellenar nombre sonido o función
return true;
}
//NO TOCAR por si introducen una tarjeta desconocida
else{
sonido="";
tarjeta=300;
sonido="TARJETA DESCONOCIDA";//a rellenar nombre sonido o función
return true;
}
}
void print_lcd(){
lcd.clear();
lcd.setCursor(0, 0); //
lcd.print("TARJETA ");
lcd.setCursor(9, 0); //
lcd.print(tarjeta);
lcd.setCursor(0, 1);
lcd.print(strID);
lcd.setCursor(0, 2);
lcd.print("");
lcd.setCursor(0, 3);
lcd.print(sonido);
}