Saltar la navegación

Código

Código para copiar y pegar

  //sacosta.org
//cada targeta fa sonar un so o fa una funció: canviar de tema, next, previous, pause, start.....
//Els sons estan organitzats en carpetes de nom 10, 20, 30 etc. S'accedeix a elles amb les targes 101, 102, 103
//els sons dins cada carpeta tenen per nom 001.mp3, 002.mp3,    etc. S'accedeix a aquests sons amb les targes 1,2,3....
//Targes sons
//des de la tarja 1 a la 22 estan relacionades amb els sons  001, 002, 003....022 de cada carpeta


//Targes especials
//targeta 101 selecciona carpeta 01
//targeta 102 selecciona carpeta 02
//targeta 103 selecciona carpeta 03


//targeta 211 atura(pausa) la reproducció d'un so.
//targeta 212 reinicia la reproducció després de la pausa (start)
//targeta 213 reprodueix el so següent al darrer reproduït o en reproducció(NEXT)
//targeta 214 reprodueix el so anterior al darrer reproduït o en reproducció(PREVIOUS)
//targeta 215 Fixa el volum a un valor determinat 10 (el volum pot anar de 0 a 30)
//targeta 216 Fixa el volum a un valor determinat 20 (el volum pot anar de 0 a 30)
//targeta 217 Fixa el volum a un valor determinat 30 (el volum pot anar de 0 a 30)
//definim 5 leds per il·luminar pictograma triat
#define LED1 2//indica tema 1 carpeta 01 s'activa tarja 101
//LED1 connectat a PIN D2
#define LED2 3//indica tema 2 carpeta 02 s'activa tarja 102
//LED2 connectat a PIN D3
#define LED3 6//indica tema 3 carpeta 03 s'activa tarja 103
//LED3 connectat a PIN D6
#define LED4 7//indica tema 4 carpeta 04
//LED4 connectat a PIN D7
#define LED5 8//indica tema 5 carpeta 05
//LED5 connectat a PIN D8


//LLibreries
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
#include "SPI.h"
#include <MFRC522.h>
#include <MFRC522Extended.h>
//#include <require_cpp11.h>
//#include <deprecated.h>


//Defineix pins mòdul RC522(Lector RFID)pins compatibles placa sacosta.org
#define SS_PIN 9
#define RST_PIN 10
MFRC522 mfrc522(SS_PIN, RST_PIN); 
MFRC522::MIFARE_Key key;


byte targeta;//variable amb la que asociarem un códi de targeta a un número.
byte carpeta=01;//variable amb la que associarem targes de tema amb el seu tema
char st[20];//variable sistema
String funcio;//variable posar nom de la funció. Descriptiu, útil a l'hora de programar


//Defineix el pins mòdul DFPlayer Mini (RX del mòdul a pin 4 Arduino, TX del mòdul a pin 5 Arduino)
SoftwareSerial mySoftwareSerial(4,5); // RX, TX. (Compatible placa sacosta.org)
DFRobotDFPlayerMini myDFPlayer;


unsigned long Temps_ara = 0;//variable utilitzada per captar el valor en millis() quant ens interessi
const int     t_aturat=1000; //variable utilizada per a fixar un "delay" emprant millis().


void setup() 
{
  pinMode(LED1,OUTPUT);
  pinMode(LED2,OUTPUT);
  pinMode(LED3,OUTPUT);
  pinMode(LED4,OUTPUT);
  pinMode(LED5,OUTPUT);
  digitalWrite(LED1,HIGH);//per defecte està actiu tema 1
//Comunicació serial amb el mòdul MP3
  mySoftwareSerial.begin(9600);
// Comunicació amb monitor serie
  Serial.begin(115200);
 // Inicia  SPI bus
  SPI.begin();
// Inicia mfrc522(lector de targes)
  mfrc522.PCD_Init(); 
  
// Missatges inicials en  monitor sèrie
  Serial.println();
  Serial.println(F("DFRobot DFPlayer Mini"));
  Serial.println(F("Inicializant mòdul DFPlayer... (3~5 segons)"));
  if (!myDFPlayer.begin(mySoftwareSerial))//si no s'inicialitza
   {
  Serial.println(F("No inicializat:"));
  Serial.println(F("1.Comprova les connexions del DFPlayer Mini"));
  Serial.println(F("2.Insereix la targeta SD"));
  while (true);
  }
  Serial.println();
  Serial.println(F("Mòdul DFPlayer Mini inicializat!"));
  myDFPlayer.setTimeOut(500); //Timeout serial 500ms
  myDFPlayer.volume(20); //Fixa un valor de la variable volume (volum altaveus (0~30)).
  myDFPlayer.EQ(0); //Equalizació normal
 
//----Opció d'escollir SD Card o USB pendrive----
myDFPlayer.outputDevice(DFPLAYER_DEVICE_U_DISK);//Si vols emprar USB pen memory
//myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD);   //Si vols emprar SD Card


  Serial.println("Acosta la targeta al lector...");
  Serial.println();
}


void loop() {
// En espera de tarja
  if ( ! mfrc522.PICC_IsNewCardPresent()|| !mfrc522.PICC_ReadCardSerial()){
  return;
  }
  MFRC522::PICC_Type piccType = mfrc522.PICC_GetType(mfrc522.uid.sak);//analitza el tipus de targeta
  if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&
      piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
      piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
  Serial.println(F("La teva targeta no és del tipus MIFARE Classic."));
  return;
    //si no és una Mifare classic torna a començar el loop
  }


  String 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("ID: ");
    Serial.println(strID);
     
//targetes so 1-50 
//per codi es pot ampliar el nombre
    if((targeta>0)&&(targeta<51)){
    Serial.print("Carpeta= ");
    Serial.print(carpeta);
    Serial.print(" so= ");
    Serial.println(targeta);
    myDFPlayer.playFolder(carpeta, targeta);
   }
 
//targes especials canvi de tema
    if((targeta==101)||(targeta==102)||(targeta==103)||(targeta==104)||(targeta==105)){
    Serial.print(targeta);
    Serial.print("   ");
    Serial.print(carpeta);
    Serial.print("   ");
    Serial.println(funcio);
    if(targeta==101){
     digitalWrite(LED1,HIGH);
     digitalWrite(LED2,LOW);
     digitalWrite(LED3,LOW);
     digitalWrite(LED4,LOW);
     digitalWrite(LED5,LOW);
     myDFPlayer.playFolder(carpeta, 100);//so numero 100, títol del contingut
    
    }
    if(targeta==102){
     digitalWrite(LED1,LOW);
     digitalWrite(LED2,HIGH);
     digitalWrite(LED3,LOW);
     digitalWrite(LED4,LOW);
     digitalWrite(LED5,LOW);
     myDFPlayer.playFolder(carpeta, 100);//so numero 100, títol del contingut
    }
    if(targeta==103){
     digitalWrite(LED1,LOW);
     digitalWrite(LED2,LOW);
     digitalWrite(LED3,HIGH);
     digitalWrite(LED4,LOW);
     digitalWrite(LED5,LOW);
      myDFPlayer.playFolder(carpeta, 100);//so numero 100, títol del contingut
    }
    if(targeta==104){
     digitalWrite(LED1,LOW);
     digitalWrite(LED2,LOW);
     digitalWrite(LED3,LOW);
     digitalWrite(LED4,HIGH);
     digitalWrite(LED5,LOW);
      myDFPlayer.playFolder(carpeta, 100);//so numero 100, títol del contingut
    }
    if(targeta==105){
     digitalWrite(LED1,LOW);
     digitalWrite(LED2,LOW);
     digitalWrite(LED3,LOW);
     digitalWrite(LED4,LOW);
     digitalWrite(LED5,HIGH);
      myDFPlayer.playFolder(carpeta, 100);//so numero 100, títol del contingut
    }
       }
  
   //targes especials per funcions 
   if(targeta==211){
    Serial.println("Targeta ");
    Serial.println(targeta);
    Serial.print("   ");
    Serial.println(funcio);
    myDFPlayer.pause();  //Pause the mp3
   }
   if(targeta==212){
    Serial.println("Targeta ");
    Serial.println(targeta);
    Serial.print("   ");
    Serial.println(funcio);
    myDFPlayer.start(); //Start
   }
   if(targeta==213){
    Serial.println("Targeta ");
    Serial.println(targeta);
    Serial.print("   ");
    Serial.println(funcio);
    myDFPlayer.next();  //Play next mp3
   }
   if(targeta==214){
    Serial.println("Targeta ");
    Serial.println(targeta);
    Serial.print("   ");
    Serial.println(funcio);
    myDFPlayer.previous();  //Play previous mp3
   }
   if(targeta==215){
    Serial.println("Targeta ");
    Serial.println(targeta);
    Serial.print("   ");
    Serial.println(funcio);
    myDFPlayer.volume(10);//Volum baix
   }
   if(targeta==216){
    Serial.println("Targeta ");
    Serial.println(targeta);
    Serial.print("   ");
    Serial.println(funcio);
    myDFPlayer.volume(20);//Volum normal
   }
   if(targeta==217){
    Serial.println("Targeta ");
    Serial.println(targeta);
    Serial.print("   ");
    Serial.println(funcio);
    myDFPlayer.volume(30);//Volum alt
   }
 
  //delay(1000);
  Temps_ara = millis();
      while(millis() < Temps_ara+t_aturat){
      }
}}
bool validateCard(String usercard) {
  // Insert your own card ID's here, insert more with else if under
 
  if(usercard.indexOf("42:3D:7F:2D") >= 0) { //targeta 1 Jesus
    targeta=1;
    return true;
  }
  else if(usercard.indexOf("32:B5:65:2D")>= 0) {//Targeta 2 Jesus
   targeta=2;
   return true;
  }
  else if(usercard.indexOf("85:2A:D4:2D") >= 0) {//Targeta 3 Jesus
   targeta=3;
   return true;
  }
  else if(usercard.indexOf("A4:DD:9F:2D") >= 0) {//Targeta 4 Jesus
   targeta=4;
   return true;
  }
  else if(usercard.indexOf("94:61:76:2D") >= 0) {//Targeta 5 Jesus
   targeta=5;
   return true;
  }
  else if(usercard.indexOf("60:3E:C5:3D") >= 0) {//Targeta 6 Jesus
   targeta=6;
   return true;
  }
  else if(usercard.indexOf("A4:7B:E4:2D") >= 0) {//Targeta 7 Jesus
   targeta=7;
   return true;
  }
  else if(usercard.indexOf("94:6C:69:2D") >= 0) {//Targeta 8 Jesus
   targeta=8;
   return true;
  }
  else if(usercard.indexOf("95:00:B4:28") >= 0) {//Targeta 9 Jesus
   targeta=9;
   return true;
  }
  else if(usercard.indexOf("03:01:C5:3F") >= 0) {//Targeta 10 Jesus
   targeta=10;
   return true;
  }
  if(usercard.indexOf("95:9E:E3:28") >= 0) { //targeta 11 Jesus
   targeta=11;
   return true;
  }
  else if(usercard.indexOf("95:7F:17:28")>= 0) {//Targeta 12 Jesus
   targeta=12;
   return true;
  }
  else if(usercard.indexOf("95:3B:AC:28") >= 0) {//Targeta 13 Jesus
   targeta=13;
   return true;
  }
  else if(usercard.indexOf("95:67:FC:28") >= 0) {//Targeta 14 Jesus
   targeta=14;
   return true;
  }
  else if(usercard.indexOf("A5:54:27:28") >= 0) {//Targeta 15 Jesus
   targeta=15;
   return true;
  }
  else if(usercard.indexOf("D3:97:0C:3E") >= 0) {//Targeta 16 Jesus
   targeta=16;
   return true;
  }
  else if(usercard.indexOf("E3:11:6F:3E") >= 0) {//Targeta 17 Jesus
   targeta=17;
   return true;
  }
  else if(usercard.indexOf("E3:E1:53:3E") >= 0) {//Targeta 18 Jesus
   targeta=18;
   return true;
  }
  else if(usercard.indexOf("A5:3C:D9:28") >= 0) {//Targeta 19 Jesus
   targeta=19;
   return true;
  }
  else if(usercard.indexOf("95:B2:2F:28") >= 0) {//Targeta 20 Jesus
   targeta=20;
   return true;
  }
  else if(usercard.indexOf("B6:B8:99:29") >= 0) {//Targeta 21 Jesus
   targeta=21;
   return true;
  }
  else if(usercard.indexOf("C3:3A:BC:3E") >= 0) {//Targeta 22 Jesus
   targeta=22;
   return true;
  }
else if(usercard.indexOf("B6:4B:7B:29") >= 0) {//Targeta 23 Jesus
   targeta=23;
   return true;
  }
  else if(usercard.indexOf("D3:6B:56:3E") >= 0) {//Targeta 24 Jesus
   targeta=24;
   return true;
  }
  else if(usercard.indexOf("90:E9:2E:30") >= 0) {//Targeta 25 Jesus
   targeta=25;
   return true;
  }
  else if(usercard.indexOf("B6:E9:D5:29") >= 0) {//Targeta 26 Jesus
   targeta=26;
   return true;
  }
  else if(usercard.indexOf("C3:41:19:3E") >= 0) {//Targeta 27 Jesus
   targeta=27;
   return true;
  }
  else if(usercard.indexOf("A0:5E:C4:30") >= 0) {//Targeta 28 Jesus
   targeta=28;
   return true;
  }
  else if(usercard.indexOf("B5:D4:DF:28") >= 0) {//Targeta 29 Jesus
   targeta=29;
   return true;
  }
  else if(usercard.indexOf("02:93:E6:33") >= 0) {//Targeta 30 Jesus
   targeta=30;
   return true;
  }
if(usercard.indexOf("93:57:01:3E") >= 0) { //targeta 31 Jesus
    targeta=31;
    return true;
  }
  else if(usercard.indexOf("E3:F0:38:3E")>= 0) {//Targeta 32 Jesus
   targeta=32;
   return true;
  }
  else if(usercard.indexOf("D3:42:28:3E") >= 0) {//Targeta 33 Jesus
   targeta=33;
   return true;
  }
  else if(usercard.indexOf("A5:F1:AA:28") >= 0) {//Targeta 34 Jesus
   targeta=34;
   return true;
  }
  else if(usercard.indexOf("B6:9D:11:29") >= 0) {//Targeta 35 Jesus
   targeta=35;
   return true;
  }
  else if(usercard.indexOf("B6:E9:D5:29") >= 0) {//Targeta 36 Jesus
   targeta=36;
   return true;
  }
  else if(usercard.indexOf("C3:41:19:3E") >= 0) {//Targeta 37 Jesus
   targeta=37;
   return true;
  }
  else if(usercard.indexOf("A0:5E:C4:30") >= 0) {//Targeta 38 Jesus
   targeta=38;
   return true;
  }
  else if(usercard.indexOf("B5:D4:DF:28") >= 0) {//Targeta 39 Jesus
   targeta=39;
   return true;
  }
  else if(usercard.indexOf("02:93:E6:33") >= 0) {//Targeta 40 Jesus
   targeta=40;
   return true;
  }
  if(usercard.indexOf("93:57:01:3E") >= 0) { //targeta 41 Jesus
    targeta=41;
    return true;
  }
  else if(usercard.indexOf("E3:F0:38:3E")>= 0) {//Targeta 42 Jesus
   targeta=42;
   return true;
  }
  else if(usercard.indexOf("D3:42:28:3E") >= 0) {//Targeta 43 Jesus
   targeta=43;
   return true;
  }
  else if(usercard.indexOf("A5:F1:AA:28") >= 0) {//Targeta 44 Jesus
   targeta=44;
   return true;
  }
  else if(usercard.indexOf("B6:9D:11:29") >= 0) {//Targeta 45 Jesus
   targeta=45;
   return true;
  }
  else if(usercard.indexOf("B6:E9:D5:29") >= 0) {//Targeta 46 Jesus
   targeta=46;
   return true;
  }
  else if(usercard.indexOf("C3:41:19:3E") >= 0) {//Targeta 47 Jesus
   targeta=47;
   return true;
  }
  else if(usercard.indexOf("A0:5E:C4:30") >= 0) {//Targeta 48 Jesus
   targeta=48;
   return true;
  }
  else if(usercard.indexOf("B5:D4:DF:28") >= 0) {//Targeta 49 Jesus
   targeta=49;
   return true;
  }
  else if(usercard.indexOf("02:93:E6:33") >= 0) {//Targeta 50 Jesus
   targeta=50;
   return true;
  }
  
  else if(usercard.indexOf("D3:0A:71:3E") >= 0) {//Targeta 101 Jesus
   funcio="";
   targeta=101;
   carpeta=01;
   funcio="Tema animals";
   return true;
  }
   else if(usercard.indexOf("C3:A5:EF:3E") >= 0) {//Targeta 102 Jesus
    funcio="";
    targeta=102;
    carpeta=02;
    funcio="Tema cançons";
    return true;
  }
 
  else if(usercard.indexOf("D3:8F:91:3E") >= 0) {//Targeta 103 Jesus
   funcio="";
   targeta=103;
   carpeta=03;
   funcio="Tema instruments musicals";
   return true;
  }
 else if(usercard.indexOf("B5:AD:7F:28") >= 0) {//Targeta 104 Jesus
   funcio="";
   targeta=104;
   carpeta=04;
   funcio="Tema Sons Humans";
   return true;
  }
   else if(usercard.indexOf("95:B3:9B:28") >= 0) {//Targeta 105 Jesus
   funcio="";
   targeta=105;
   carpeta=05;
   funcio="Tema Noms nens/profes";
   return true;
  }
  //tecles funció pause, play, volum, etc
  else if(usercard.indexOf("D3:EF:DD:3E") >= 0) {//Targeta 211 Jesus
   funcio="";
   targeta=211;
   funcio="Pause";
   return true;
  }
  else if(usercard.indexOf("E3:F0:A0:3E") >= 0) {//Targeta 212 Jesus
   funcio="";
   targeta=212;
   funcio="Play";
   return true;
  }
  else if(usercard.indexOf("A5:74:7D:28") >= 0) {//Targeta 213 Jesus
   funcio="";
   targeta=213;
   funcio="Next";
   return true;
  }
  else if(usercard.indexOf("E3:E6:77:3E") >= 0) {//Targeta 214 Jesus
   funcio="";
   targeta=214;
   funcio="Previous";
   return true;
  }
  else if(usercard.indexOf("F3:4B:97:3E") >= 0) {//Targeta 215 Jesus
   funcio="";
   targeta=215;
   funcio="Volum baix";
   return true;
  }
  else if(usercard.indexOf("E3:42:1B:3E") >= 0) {//Targeta 216 Jesus
   funcio="";
   targeta=216;
   funcio="Volum mitjà";
   return true;
  }
  else if(usercard.indexOf("A5:A9:FF:28") >= 0) {//Targeta 217 Jesus
   funcio="";
   targeta=217;
   funcio="Volum Alt";
   return true;
  }
}