Загрузка данных


#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);
}