#include "controller.h" #include "spi_master.h" Controller::Controller(Player* p) { _player = p; _rfid = new MFRC522(PIN_RC522_CS, MFRC522::UNUSED_PIN); SPIMaster::enable(PIN_RC522_CS); Serial.println("Initializing MFRC522..."); _rfid->PCD_Init(); _rfid->PCD_DumpVersionToSerial(); SPIMaster::disable(); } void Controller::loop() { unsigned long now = millis(); if ((_last_rfid_scan_at < now - RFID_SCAN_INTERVAL) || (now < _last_rfid_scan_at)) { _check_rfid(); _last_rfid_scan_at = now; } _check_serial(); } uint32_t Controller::_get_rfid_card_uid() { SPIMaster::enable(PIN_RC522_CS); if (!_rfid->PICC_ReadCardSerial()) { if (!_rfid->PICC_IsNewCardPresent()) { return 0; } if (!_rfid->PICC_ReadCardSerial()) { return 0; } } uint32_t uid = _rfid->uid.uidByte[0]<<24 | _rfid->uid.uidByte[1]<<16 | _rfid->uid.uidByte[2]<<8 | _rfid->uid.uidByte[3]; SPIMaster::disable(); return uid; } void Controller::_check_rfid() { uint32_t uid = _get_rfid_card_uid(); //Serial.printf("Found card: %08x\n", uid); if (uid != _last_rfid_card_uid) { if (uid > 0) { Serial.printf("New RFID card uid: %08x\n", uid); // Play String s_uid = String(uid, HEX); _player->play_album(s_uid); } else { Serial.println("No more RFID card."); // Stop _player->stop(); } _last_rfid_card_uid = uid; } } void Controller::_check_serial() { if (Serial.available() > 0) { char c = Serial.read(); if (c == 'n') { _player->track_next(); } else if (c=='p') { _player->track_prev(); } else if (c=='s') { _player->stop(); } else if (c=='+') { _player->vol_up(); } else if (c=='-') { _player->vol_down(); } else if (c==' ') { _player->play_album("12345678"); } else if (c=='q') { _player->play_system_sound("12345678/Biene Maja.mp3"); } } }