Lector #Bibliolabs
Clic aquí para descargar los archivos .ino
Pines usados:
--------------------------
Arduino
Uno
Señal Pin
--------------------------
RST/Reset 6 (9)
SPI SS 7 (10)
SPI MOSI 11 / ICSP-4
SPI MISO 12 / ICSP-1
SPI SCK 13 / ICSP-3
*/
//incluimos las dos lbrerías necesarias
#include <SPI.h>
#include <MFRC522.h>
#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
#define RST_PIN 9 // Estos dos pines son configurables
#define SS_PIN 10
int bvol = A5; // Volumen--
int bVOL = A4; // Volumen++
int bCapAnterior = A3; // Capitulo anterior
int bPlayPause = A1; // Play/Pause
int bCapSiguiente = A0; // Capitulo siguiente
int volumen = 20;
bool flag1 = false;
bool state = true;
MFRC522 mfrc522(SS_PIN, RST_PIN); // Se crea una instancia MFRC522
//Se declara cada libro con su UID
#define principito 0x3E4E3F4
#define veinteMilLeguas 0x83DCE3F4
#define corazonDelator 0xB3E0E3F4
#define elArteDeLaGuerra 0xD3DCE3F4
#define laDivinaComedia 0x63E0E3F4
#define calleMorgue 0x13E0E3F4
#define dorianGray 0xF3E4E3F4
#define tomsawyer 0x878F7A85
void setup() {
Serial.begin(9600);
SPI.begin(); // Se inicia la comunicación SPI
mfrc522.PCD_Init(); // Se inicializa MFRC522
mp3_set_serial (Serial); //Prepara el serial para comunicación con el mmodulo MP3
delay(1); //espera 1ms para configurar el volumen del módulo
pinMode(bCapAnterior, INPUT_PULLUP); //Se configuran los pines conectados a los botones como entradas
pinMode(bPlayPause, INPUT_PULLUP);
pinMode(bCapSiguiente, INPUT_PULLUP);
pinMode(bVOL, INPUT_PULLUP);
pinMode(bvol, INPUT_PULLUP);
mp3_set_volume (volumen);
}
void loop() {
state = digitalRead(2);
//Se verifica que la tarjeta no sea igual a la anterior para evitar errores de lectura y loops infinitos
delay(200);
if ((flag1) && (state)) {
mp3_next();
}
delay(100);
if (mfrc522.PICC_IsNewCardPresent()) {
//Se llama la función getID() encargada de devolver el valor UID de cada tarjeta
unsigned long uid = getID();
//Si la tarjeta es válida, continúe
if (uid != -1) {
delay(10);
//Según el UID leido realice una acción, en este caso devolver el nombre del libro en la consola serial
switch (uid) {
case principito:
mp3_play (1);
flag1 = true;
delay(300);
break;
case veinteMilLeguas:
mp3_play (30);
flag1 = true;
delay(300);
break;
case corazonDelator:
mp3_play (77);
flag1 = true;
delay(300);
break;
case elArteDeLaGuerra:
mp3_play (78);
flag1 = true;
delay(300);
break;
case laDivinaComedia:
mp3_play (101);
flag1 = true;
delay(300);
break;
case dorianGray:
mp3_play (140);
flag1 = true;
delay(300);
break;
case calleMorgue:
mp3_play (129);
flag1 = true;
delay(300);
break;
case tomsawyer:
mp3_play (159);
flag1 = true;
delay(300);
break;
//Si no coincide con ningún UID en la base de datos, realice lo siguiente:
default:
break;
}
}
}
//verifica si se está presionando algún botón
if (digitalRead(bCapAnterior) == 0) {
//reproducir capitulo anterior
mp3_prev ();
delay (300); //No recibe más acciones de botón por 300ms para dar tiempo de que el usuario libere el botón
}
if (digitalRead(bPlayPause) == 0) {
if (!state) {
mp3_pause();
flag1 = false;
}
if (state) {
mp3_play();
flag1 = true;
}
delay (300);
}
if (digitalRead(bCapSiguiente) == 0) {
//reproducir capitulo siguiente
mp3_next ();
delay (300);
}
if (digitalRead(bVOL) == 0) {
//aumentar volumen
volumen = volumen + 5; // Aumenta la variable "volumen" en una unidad
if (volumen > 30) { // El rango de volumen va de 0 - 30
volumen = 30; // Si se llega a un valor mayor que 30, lo iguala a 30
}
mp3_set_volume (volumen);// Envía el valor de volumen al módulo mp3
delay (50);
}
if (digitalRead(bvol) == 0) {
//bajar volumen
volumen = volumen - 5;
if (volumen < 0) {
volumen = 0;
}
mp3_set_volume (volumen);
delay (50);
}
}
//------------------------------------------------------------------
//Función para devolver el UID
//------------------------------------------------------------------
unsigned long getID() {
if ( ! mfrc522.PICC_ReadCardSerial()) { //Si no es una tarjeta válida regrese con un valor "-1", si es válida, continúe
return -1;
}
//Se lee cada byte del UID y se almacena en la variable temporal hex_num
unsigned long uid;
uid = (long)mfrc522.uid.uidByte[0] << 24;
uid += (long)mfrc522.uid.uidByte[1] << 16;
uid += (long)mfrc522.uid.uidByte[2] << 8;
uid += (long)mfrc522.uid.uidByte[3];
mfrc522.PICC_HaltA(); // Luego de finalizar la lectura del UID detenga la comunicación
return uid; //Regresa con el valor del UID
}
Comentarios
Publicar un comentario