#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN 5
#define SS_PIN 53
#define BUZZER_PIN 3
MFRC522 mfrc522(SS_PIN, RST_PIN);
// ====================================================================
// ВПИШИ СЮДА РЕАЛЬНЫЕ UID ТВОИХ КАРТОЧЕК (4 байта для каждой)
// Например, если монитор порта выдал "UID метки: A3 5F C2 18",
// то первый массив будет выглядеть: {0xA3, 0x5F, 0xC2, 0x18}
// ====================================================================
byte card1[] = {0x00, 0x00, 0x00, 0x00}; // Первая карточка (вверх)
byte card2[] = {0x00, 0x00, 0x00, 0x00}; // Вторая карточка (вниз)
void setup() {
Serial.begin(9600);
SPI.begin();
mfrc522.PCD_Init();
pinMode(BUZZER_PIN, OUTPUT);
Serial.println("=== Музыкальная шкатулка (тест) ===");
Serial.println("Жду карточку...");
}
void loop() {
if (!mfrc522.PICC_IsNewCardPresent()) return;
if (!mfrc522.PICC_ReadCardSerial()) return;
// Выводим UID в монитор порта (на случай, если будем добавлять новые)
Serial.print("Считан UID: ");
for (byte i = 0; i < mfrc522.uid.size; i++) {
Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte[i], HEX);
}
Serial.println();
// Проверяем, какая карточка приложена
if (compareUID(mfrc522.uid.uidByte, card1)) {
Serial.println("Карточка 1: До мажор ВВЕРХ");
playScaleUp();
}
else if (compareUID(mfrc522.uid.uidByte, card2)) {
Serial.println("Карточка 2: До мажор ВНИЗ");
playScaleDown();
}
else {
Serial.println("Неизвестная карточка. Короткий писк.");
tone(BUZZER_PIN, 500, 200); // Низкий тон для чужой карты
}
mfrc522.PICC_HaltA(); // Останавливаем чтение
delay(2000); // Пауза, чтобы мелодия не запускалась 100 раз подряд
}
// Функция сравнения UID
bool compareUID(byte *readUID, byte *storedUID) {
for (byte i = 0; i < 4; i++) {
if (readUID[i] != storedUID[i]) return false;
}
return true;
}
// ====================================================================
// МЕЛОДИИ
// ====================================================================
void playScaleUp() {
// До, Ре, Ми, Фа, Соль, Ля, Си, До (частоты в Гц)
int notes[] = {262, 294, 330, 349, 392, 440, 494, 523};
for (int i = 0; i < 8; i++) {
tone(BUZZER_PIN, notes[i], 250); // Играем ноту 250 мс
delay(300); // Пауза между нотами
}
noTone(BUZZER_PIN);
}
void playScaleDown() {
// До, Си, Ля, Соль, Фа, Ми, Ре, До
int notes[] = {523, 494, 440, 392, 349, 330, 294, 262};
for (int i = 0; i < 8; i++) {
tone(BUZZER_PIN, notes[i], 250);
delay(300);
}
noTone(BUZZER_PIN);
}