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

Entradas populares de este blog

Alarma visual (Led con ultrasonido)

Sistema de turnos con led de 7 segmentos y pulsadores

Teclado matricial 4x4 con LCD