шарманка, управляемая RFID-карточками

Тема в разделе "Глядите, что я сделал", создана пользователем padre, 16 ноя 2015.

  1. padre

    padre Нуб

    Прикольно получилось. У нас в школе проход и питание организованы по таким карточкам, поэтому они есть у всех. Поскольку незашитая карточка вызывает проигрывание случайного трека, получается нечто, напоминающее гадание на книге... Не знаю, надо ли приводить схему подключения, работу с MP3-плеером брал из amperka.ru (http://amperka.ru/product/df-player-mp3-module), работу с RC522 - из http://mysku.ru/blog/aliexpress/23114.html
    Вот видео с готовым проектом:


    #include <DFPlayer_Mini_Mp3.h>
    #include <SoftwareSerial.h>
    #include <SPI.h>
    #include <MFRC522.h>
    #define SS_PIN 10
    #define RST_PIN 9
    MFRC522 mfrc522(SS_PIN, RST_PIN); // объект MFRC522
    unsigned long uidDec, uidDecTemp; // для отображения номера карточки в десятичном формате.
    unsigned long uidDecPred; // предыдущая карточка?
    byte bCounter, readBit;
    unsigned long ticketNumber;
    int ledPin=8; // сигнал YES
    int maxTrack=75; // для случайного выбора задаём макс.к-во треков
    int volume=15; // уровень громкости (мах=30)

    void setup() {
    // put your setup code here, to run once:
    pinMode(ledPin,OUTPUT);
    SPI.begin(); // инициализация SPI.
    mfrc522.PCD_Init(); // инициализация MFRC522.
    Serial.begin (9600);
    mp3_set_serial (Serial);
    delay(1);
    mp3_set_volume (volume); // средняя громкость
    randomSeed(analogRead(9)); //иниц-я случ.последов-ти чтением из НЕИСПОЛЬЗУЕМОГО!!! пина
    }

    void loop() {
    // put your main code here, to run repeatedly:
    if ( ! mfrc522.PICC_IsNewCardPresent()) {
    return;
    }
    if ( ! mfrc522.PICC_ReadCardSerial()) {
    return;
    }
    uidDec = 0;
    for (byte i = 0; i < mfrc522.uid.size; i++) {
    uidDecTemp = mfrc522.uid.uidByte;
    uidDec = uidDec*256+uidDecTemp;
    }
    if (uidDec!=uidDecPred) { // ничего не делаем, пока не поднесут новую карточку
    uidDecPred=uidDec; // КРОМЕ NEXT!!!
    digitalWrite(ledPin, HIGH); // turn the LED on (HIGH is the voltage level)
    delay(500); // ждём немножко
    digitalWrite(ledPin, LOW); // turn the LED off by making the voltage LOW
    if (uidDec==2568126310){
    mp3_stop ();
    }
    else if (uidDec==1226536295){
    mp3_play (1);
    }
    else if (uidDec==4160316805){ // для NEXT играем 20 сек, если карту не убрали - след.трек
    mp3_next ();
    delay(20000);
    uidDecPred=0;
    }
    else if (uidDec==1112510831){
    volume=volume-1;
    if (volume<0) {
    volume=0;
    }
    mp3_set_volume (volume);
    delay(500); // не частим!
    uidDecPred=0;
    }
    else if (uidDec==3987069478){
    volume=volume+1;
    if (volume>30) {
    volume=30;
    }
    mp3_set_volume (volume);
    delay(500); // не частим!
    uidDecPred=0;
    }
    else if (uidDec==808066852){
    mp3_play (6);
    }
    else{
    mp3_play (random(1,maxTrack)+1); // карта не в базе -> играем случайный трек
    }
    }
    }
     
  2. Tomasina

    Tomasina Сушитель лампочек Модератор

    хе, оказывается школьные карточки совместимы с RC522 - возьмем на заметку ;)
     
  3. padre

    padre Нуб

    Ага, а ещё - с брелком от домофона :)