Прикольно получилось. У нас в школе проход и питание организованы по таким карточкам, поэтому они есть у всех. Поскольку незашитая карточка вызывает проигрывание случайного трека, получается нечто, напоминающее гадание на книге... Не знаю, надо ли приводить схему подключения, работу с 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); // карта не в базе -> играем случайный трек } } }