Código Rfid y Mp3
Cambio del código de las tarjetas
Os recordamos que debéis cambiar el código de cada tarjeta
que aparece en nuestra programación por los vuestros.
Buscad donde aparezcan todas las tarjetas y las vais cambiando.
Tenéis toda la información en el apartado "Codigo de las tarjetas"
de la nube anterior, la que fucniona con tarjetas RFID.
Librerias necesarias
Este código lleva incorporado unas librerias que debéis tener instaladas
en vuestro Arduino. En caso negativo, mirad el apartaado correspondiente
del capitulo anterior.
En la programación, en el código vas a encontrar estas líneas:
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
#include "SPI.h"
#include <MFRC522.h
#include <MFRC522Extended.h
Estas indican los nombres de las librerías que vas a necesitar para que funcione. Unas son para
comunicar un componente con otro, otra para ver los resultados en el Monitor serie y las necesarias
para hacer funcionar el lector de Rfid y el lector de Mp3. Si no tenéis estas librerías, deberéis de ir a Herramientas>Administración Bibliotecas
Y buscad las librerías que se necesitan.
Nota: Cuando se sube un código a un Arduino, si no se tienen las librerías que el código necesita,
el mismo programa avisa del error. Localiza la librería e instálala.
Muy importante:
Cuando subamos el código a la placa Arduino hay que tener todo conectado para que reconozca
todos los dispositivos. Para garantizar posibles problemas, hay que tener conectados los altavoces.
Código
//sacosta.org
//inclou canvi brillantor targes 204 i 205
//afegir tres sons diferents per a tres repeticions del llamp
//canvi delay a millis
//inclou que pots deixar la targe a sobre aplicat a targes 1-14
//les 201, 202, 203(per funció única), 204 i 205(per si es volen fer mées d'un esglaó de canvi) no ho porten incorporat
//cada targeta fa sonar un so i encen la tira un a un d'un color/colors determinat
//la tarja 14 apaga el so i la tira
//línies 43-58 defineixen els color de cada tarja de color fixe
//ID targes linies 305-382
//Targes especials
//targeta 201 Fixa el volum a un valor determinat 10 (el volum pot anar de 0 a 30)
//targeta 202 Fixa el volum a un valor determinat 20 (el volum pot anar de 0 a 30)
//targeta 203 Fixa el volum a un valor determinat 30 (el volum pot anar de 0 a 30)
//targeta 204 incrementa la brillantor entre mínim i màxim +40
//targeta 205 decrementa la brillantor entre màxim i mínim -40
#include <Adafruit_NeoPixel.h>
#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>
// Define pines modulo RC522
//#define SS_PIN 10
//#define RST_PIN 9
//Configuracions
const int PIN = 6; // Pin Arduino a senyal tira
const int NUMPIXELS = 60; // Número de neopíxels de la tira
const int SS_PIN = 10; // Data PIN DE MFRC522 A PIN 10 ARDUINO
const int RST_PIN = 9; // Reset PIN DE MFRC522 A PIN 9 ARDUINO
const int TIME =150; //
const int BRILLANTOR= 20; //Brillantor dels neopixels
MFRC522 mfrc522(SS_PIN, RST_PIN);
MFRC522::MIFARE_Key key;
//Variables: pixels
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
//Definició de colors
const uint32_t red=pixels.Color(193, 0, 0);//1 vermell
const uint32_t green=pixels.Color(0, 193, 0);//2 verd
const uint32_t blue=pixels.Color(0, 79, 169);//3 blau
const uint32_t purple=pixels.Color(0, 255, 255);//4 blau claret
const uint32_t taronja=pixels.Color(195, 105, 0);//5 groc
const uint32_t taronja_claret=pixels.Color(139, 42, 0);//6 taronja
const uint32_t blau_clar=pixels.Color(0, 118, 35);//7 verd blavos
const uint32_t violeta=pixels.Color(255,47, 84);//8 rosa
const uint32_t violeta_fort=pixels.Color(255, 0, 198);//9 violeta
const uint32_t blanc=pixels.Color(200,200,200);//10 blanc
const uint32_t chocolate=pixels.Color(210, 5, 30);//11 vermell rosa
const uint32_t verd_blavos=pixels.Color(0, 255, 128); //12 blau verdos
const uint32_t hotpink=pixels.Color(25,25,112);//13 blau nit
const uint32_t yellow=pixels.Color(166, 136, 0);//14 groc
const uint32_t blank=pixels.Color(0, 0, 0);//apagat
//Variables per a llamp
int t_llamp=15;// temps pujada llamp
int num_llamps=3; //nombre de llamps
int repeticio=0;
//Variables arc de sant martí
int t_on=50;//temps per a pujar arc de sant martí
int brillantor=80;//pots modificar el Brightness de la tira amb les tecles 204(+) i 205(-)
int brillantor_max=240;//fixa el màxim de brillantor
int brillantor_min=40;//fixa el mínim de brillantor
int targeta;//variable amb la que asociarem un códi de targeta a un número.
char st[20];//variable sistema
// 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 he canviat a 4 i 5 per poder assignar el 6 al pin senyal Neopixel
DFRobotDFPlayerMini myDFPlayer;
String strID = "";
String strIDtemp="";//variable creada para poder deixar la tarja a sobre del lector de rfid
unsigned long Temps_ara = 0;//variable utilizada per captar el valor de millis() quant ens interessi
const int t_aturat = 1000; //variable utilizada per a fixar un "delay" emprant millis().
void setup()
{
//Comunicació serial amb el mòdul MP3
mySoftwareSerial.begin(9600);
// Inicia serial
Serial.begin(9600);
pixels.begin();
pixels.setBrightness(BRILLANTOR);
// 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
Serial.println("Acosta la targeta al lector...");
Serial.println();
}
void loop()
{
// En espera de targeta
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("*** LA TEVA ID ÉS: ");
Serial.println(strID);
Serial.print("");
if(targeta==1){
if(strID!=strIDtemp){//si la tarja llegida és diferent a la anterior o es la primera que llegeix, posa en marxa la seva funció corresponent
Serial.println(targeta);
pixels.setBrightness(brillantor);//fixam la brillantor dels neopixels
llamp();//la funció duu inclòs el so 1 llamp
strIDtemp=strID;//donam a la variable temporal el valor de la darrera tarja llegida, así s'evita que se reinicie la funció de la tarja
} return true;
}
if(targeta==2){//so 4
if(strID!=strIDtemp){//si la tarja llegida és diferent a la anterior o es la primera que llegeix, posa en marxa la seva funció corresponent
Serial.println(targeta);
pixels.setBrightness(brillantor);//fixam la brillantor dels neopixels
arc_sant_marti ();
strIDtemp=strID;//damos a la variable temporal el valor de la última tarjeta leida, así se evita que se reinicie el sonido si se deja la tarjeta sobre el lector
} return true;
}
if(targeta==3){// blanc
if(strID!=strIDtemp){//si la tarja llegida és diferent a la anterior o es la primera que llegeix, posa en marxa la seva funció corresponent
Serial.println(targeta);
pixels.setBrightness(brillantor);//fixam la brillantor dels neopixels
myDFPlayer.play(5);
setAll(blanc);
strIDtemp=strID;//damos a la variable temporal el valor de la última tarjeta leida, así se evita que se reinicie el sonido si se deja la tarjeta sobre el lector
} return true;
}
if(targeta==4){//so
if(strID!=strIDtemp){//si la tarja llegida és diferent a la anterior o es la primera que llegeix, posa en marxa la seva funció corresponent
Serial.println(targeta);
myDFPlayer.play(6);
pixels.setBrightness(brillantor);//fixam la brillantor dels neopixels
setAll(purple);
strIDtemp=strID;//damos a la variable temporal el valor de la última tarjeta leida, así se evita que se reinicie el sonido si se deja la tarjeta sobre el lector
} return true;
}
if(targeta==5){//so 7
if(strID!=strIDtemp){//si la tarja llegida és diferent a la anterior o es la primera que llegeix, posa en marxa la seva funció corresponent
Serial.println(targeta);
myDFPlayer.play(7);
pixels.setBrightness(brillantor);//fixam la brillantor dels neopixels
setAll(taronja_claret);
strIDtemp=strID;//damos a la variable temporal el valor de la última tarjeta leida, así se evita que se reinicie el sonido si se deja la tarjeta sobre el lector
} return true;
}
if(targeta==6){//so 8
if(strID!=strIDtemp){//si la tarja llegida és diferent a la anterior o es la primera que llegeix, posa en marxa la seva funció corresponent
Serial.println(targeta);
myDFPlayer.play(8);
pixels.setBrightness(brillantor);//fixam la brillantor dels neopixels
setAll(yellow);
strIDtemp=strID;//damos a la variable temporal el valor de la última tarjeta leida, así se evita que se reinicie el sonido si se deja la tarjeta sobre el lector
} return true;
}
if(targeta==7){
if(strID!=strIDtemp){//si la tarja llegida és diferent a la anterior o es la primera que llegeix, posa en marxa la seva funció corresponent
Serial.println(targeta);
myDFPlayer.play(9);
pixels.setBrightness(brillantor);//fixam la brillantor dels neopixels
setAll(green);
strIDtemp=strID;//damos a la variable temporal el valor de la última tarjeta leida, así se evita que se reinicie el sonido si se deja la tarjeta sobre el lector
} return true;
}
if(targeta==8){
if(strID!=strIDtemp){//si la tarja llegida és diferent a la anterior o es la primera que llegeix, posa en marxa la seva funció corresponent
Serial.println(targeta);
myDFPlayer.play(10);
pixels.setBrightness(brillantor);//fixam la brillantor dels neopixels
setAll(blue);
strIDtemp=strID;//damos a la variable temporal el valor de la última tarjeta leida, así se evita que se reinicie el sonido si se deja la tarjeta sobre el lector
} return true;
}
if(targeta==9){
if(strID!=strIDtemp){//si la tarja llegida és diferent a la anterior o es la primera que llegeix, posa en marxa la seva funció corresponent
Serial.println(targeta);
myDFPlayer.play(11);
pixels.setBrightness(brillantor);//fixam la brillantor dels neopixels
setAll(violeta_fort);
strIDtemp=strID;//damos a la variable temporal el valor de la última tarjeta leida, así se evita que se reinicie el sonido si se deja la tarjeta sobre el lector
} return true;
}
if(targeta==10){
if(strID!=strIDtemp){//si la tarja llegida és diferent a la anterior o es la primera que llegeix, posa en marxa la seva funció corresponent
Serial.println(targeta);
myDFPlayer.play(12);
pixels.setBrightness(brillantor);//fixam la brillantor dels neopixels
setAll(verd_blavos);
strIDtemp=strID;//damos a la variable temporal el valor de la última tarjeta leida, así se evita que se reinicie el sonido si se deja la tarjeta sobre el lector
} return true;
}
if(targeta==11){
if(strID!=strIDtemp){//si la tarja llegida és diferent a la anterior o es la primera que llegeix, posa en marxa la seva funció corresponent
Serial.println(targeta);
myDFPlayer.play(13);
pixels.setBrightness(brillantor);//fixam la brillantor dels neopixels
setAll(yellow);
strIDtemp=strID;//damos a la variable temporal el valor de la última tarjeta leida, así se evita que se reinicie el sonido si se deja la tarjeta sobre el lector
} return true;
}
if(targeta==12){
if(strID!=strIDtemp){//si la tarja llegida és diferent a la anterior o es la primera que llegeix, posa en marxa la seva funció corresponent
Serial.println(targeta);
myDFPlayer.play(14);
pixels.setBrightness(brillantor);//fixam la brillantor dels neopixels
setAll(violeta_fort);
strIDtemp=strID;//damos a la variable temporal el valor de la última tarjeta leida, así se evita que se reinicie el sonido si se deja la tarjeta sobre el lector
} return true;
}
if(targeta==13){
if(strID!=strIDtemp){//si la tarja llegida és diferent a la anterior o es la primera que llegeix, posa en marxa la seva funció corresponent
Serial.println(targeta);
myDFPlayer.play(15);
pixels.setBrightness(brillantor);//fixam la brillantor dels neopixels
setAll(taronja_claret);
strIDtemp=strID;//damos a la variable temporal el valor de la última tarjeta leida, así se evita que se reinicie el sonido si se deja la tarjeta sobre el lector
} return true;
}
if(targeta==14){
if(strID!=strIDtemp){//si la tarja llegida és diferent a la anterior o es la primera que llegeix, posa en marxa la seva funció corresponent
myDFPlayer.pause(); //pause the mp3
setAll(blank);
strIDtemp=strID;//damos a la variable temporal el valor de la última tarjeta leida, así se evita que se reinicie el sonido si se deja la tarjeta sobre el lector
} return true;
}
if(targeta==201){
// Serial.println("Targeta - Accés alliberat!!");
Serial.println("v_10");
myDFPlayer.volume(10);
strIDtemp=strID;
}
if(targeta==202){
Serial.println("v_20");
myDFPlayer.volume(20);
strIDtemp=strID;
}
if(targeta==203){
Serial.println("v_30");
myDFPlayer.volume(30);
strIDtemp=strID;
}
if(targeta==204){
Serial.println(brillantor);
brillantor=brillantor+40;
if (brillantor<=brillantor_max){
brillantor=brillantor_max;}
Serial.println(brillantor);
strIDtemp=strID;
}
if(targeta==205){
Serial.println(brillantor);
brillantor=brillantor-40;
if (brillantor<=brillantor_min){
brillantor=brillantor_min; }
Serial.println(brillantor);
strIDtemp=strID;
}
//delay(1000);
Temps_ara = millis();
while(millis() < Temps_ara+t_aturat){
}
}}
bool validateCard(String usercard) {
if(usercard.indexOf("A7:19:2C:63") >= 0) {
targeta=1;
return true;
}
else if(usercard.indexOf("27:C0:27:63")>= 0) {
targeta=2;
return true;
}
else if(usercard.indexOf("07:02:29:63") >= 0) {
targeta=3;
return true;
}
else if(usercard.indexOf("57:D1:27:63") >= 0) {
targeta=4;
return true;
}
else if(usercard.indexOf("97:55:2F:63") >= 0) {
targeta=5;
return true;
}
else if(usercard.indexOf("AA:D0:22:B4") >= 0) {
targeta=6;
return true;
}
else if(usercard.indexOf("1A:1B:E6:AE") >= 0) {
targeta=7;
return true;
}
else if(usercard.indexOf("5B:55:5F:10") >= 0) {
targeta=8;
return true;
}
else if(usercard.indexOf("3A:8F:68:B3") >= 0) {
targeta=9;
return true;
}
else if(usercard.indexOf("B5:8F:00:28") >= 0) {
targeta=10;
return true;
}
/*else if(usercard.indexOf("B5:B4:57:28") >= 0) {
targeta=11;
return true;
}
else if(usercard.indexOf("B3:74:6C:3E") >= 0) {
targeta=12;
return true;
}
else if(usercard.indexOf("95:F6:62:28") >= 0) {
targeta=13;
return true;
}*/
else if(usercard.indexOf("F3:38:D7:3E") >= 0) {
targeta=14;
return true;
}
if(usercard.indexOf("B3:74:6C:3E") >= 0) {
targeta=201;
return true;
}
if(usercard.indexOf("E3:B8:D9:3E") >= 0) {
targeta=202;
return true;
}
if(usercard.indexOf("E3:B8:D1:3E") >= 0) {
targeta=203;
return true;
}
//////////
if(usercard.indexOf("95:F6:62:28") >= 0) {
targeta=204;
return true;
}
if(usercard.indexOf("B5:B4:57:28") >= 0) {
targeta=205;
return true;
}
//////////
}
//funció per donar color a la tira en funció dels colors definits
void setAll(uint32_t color) {
for(int i=0;i<NUMPIXELS;i++){
pixels.setPixelColor(i, color);
pixels.show();
Temps_ara = millis();
while(millis() < Temps_ara+10){
}
}
}
//funció llamp. Empre 001_tro, 002_tro i 003_tro
void llamp(){
repeticio=0;
for(int x=0; x<num_llamps;x++){
repeticio++;
for (int i=1; i<NUMPIXELS;i++){
pixels.setPixelColor(i, pixels.Color(0, 0, 0));
pixels.show();//encendemos el led
}
for (int i=1; i<NUMPIXELS+1;i++){
// pixels.setBrightness(fadeControl);//set the pixel brightness
pixels.setPixelColor(i-1, pixels.Color(0, 0, 0));
pixels.setPixelColor(i, pixels.Color(255, 255, 255));
pixels.setPixelColor(i+1, pixels.Color(255, 255, 255));
pixels.setPixelColor(i+2, pixels.Color(255, 255, 255));
pixels.setPixelColor(i+3, pixels.Color(255, 255, 255));
pixels.show();//encendemos el led
Temps_ara = millis();
while(millis() < Temps_ara+t_llamp){
}
}
for (int i=1; i<NUMPIXELS;i++){
pixels.setPixelColor(i, pixels.Color(255, 255, 255));
pixels.show();//encendemos el led
}
myDFPlayer.play(repeticio);
Temps_ara = millis();
while(millis() < Temps_ara+150){
}
for (int i=1; i<NUMPIXELS;i++){
pixels.setPixelColor(i, pixels.Color(0, 0, 0));
pixels.show();
}
Temps_ara = millis();
while(millis() < Temps_ara+11000){
}
}
for (int i=1; i<NUMPIXELS;i++){
pixels.setPixelColor(i, pixels.Color(193, 0, 0));
pixels.show();
Temps_ara = millis();
while(millis() < Temps_ara+20){
}
}
}
//fi funció llamp
//funció arc de Sant Martí
void arc_sant_marti (){
myDFPlayer.play(4);//s'ha de posar el so corresponent a l'arc de sant martí
//primer apaga la tira
for (int i=1; i<NUMPIXELS;i++){
pixels.setPixelColor(i, pixels.Color(0, 0, 0));
pixels.show();
}
// omple de color la tira per trams
for (int i=0; i<9;i++){//lila
pixels.setPixelColor(i, pixels.Color(255, 0, 0));
pixels.show();
Temps_ara = millis();
while(millis() < Temps_ara+t_on){
}
}
for (int i=9; i<19;i++){//vermell
pixels.setPixelColor(i, pixels.Color(255, 45, 0));
pixels.show();
Temps_ara = millis();
while(millis() < Temps_ara+t_on){
}
}
for (int i=19; i<29;i++){//taronja
pixels.setPixelColor(i, pixels.Color(255, 117, 0));
pixels.show();
Temps_ara = millis();
while(millis() < Temps_ara+t_on){
}
}
for (int i=29; i<39;i++){//groc
pixels.setPixelColor(i, pixels.Color(0,255, 0));
pixels.show();
Temps_ara = millis();
while(millis() < Temps_ara+t_on){
}
}
for (int i=39; i<49;i++){//verd
pixels.setPixelColor(i, pixels.Color(0,0, 255));
pixels.show();
Temps_ara = millis();
while(millis() < Temps_ara+t_on){
}
}
for (int i=49; i<60;i++){//blau
pixels.setPixelColor(i, pixels.Color(214, 0, 193));
pixels.show();
Temps_ara = millis();
while(millis() < Temps_ara+t_on){
}
}
}
//fi funció arc de sant marti
Obra publicada con Licencia Creative Commons Reconocimiento Compartir igual 4.0