Mini Project 2

#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>

// Define pins for RFID
#define SS_PIN 10
#define RST_PIN 9

// Define pins for LEDs
#define GREEN_LED_PIN 7
#define YELLOW_LED_PIN 4
#define RED_LED_PIN 2

// Define pin for Servo
#define SERVO_PIN 3

// Define pin for Buzzer
#define BUZZER_PIN A5

// Create instances
MFRC522 mfrc522(SS_PIN, RST_PIN);
Servo myServo;

// Predefined UIDs for coins 1 to 10
byte validUIDs[10][4] = {
  {0xDE, 0xAD, 0xBE, 0xEF}, // Example UID 1
  {0xCA, 0xFE, 0xBA, 0xBE}, // Example UID 2
  {0x23, 0x05, 0xD3, 0x0D}, // Card 1
  {0x53, 0xA5, 0x5E, 0x1A}, // Card 2
  // Add more UIDs here
};


void setup() {
  Serial.begin(9600);
  SPI.begin();
  mfrc522.PCD_Init();

  // Initialize LEDs
  pinMode(GREEN_LED_PIN, OUTPUT);
  pinMode(YELLOW_LED_PIN, OUTPUT);
  pinMode(RED_LED_PIN, OUTPUT);

  // Initialize Servo
  myServo.attach(SERVO_PIN);
  myServo.write(90); // Set to normal position

  // Initialize Buzzer
  pinMode(BUZZER_PIN, OUTPUT);

  // Set initial LED state
  digitalWrite(YELLOW_LED_PIN, HIGH);
}

void loop() {
  // Look for new cards
  if (!mfrc522.PICC_IsNewCardPresent() || !mfrc522.PICC_ReadCardSerial()) {
    return;
  }

  // Check if the UID is valid
  bool isValid = false;
  for (int i = 0; i < 10; i++) {
    if (memcmp(mfrc522.uid.uidByte, validUIDs[i], 4) == 0) {
      isValid = true;
      break;
    }
  }

  if (isValid) {
    // Valid UID
    digitalWrite(GREEN_LED_PIN, HIGH);
    digitalWrite(YELLOW_LED_PIN, LOW);
    digitalWrite(RED_LED_PIN, LOW);
    myServo.write(0); // Move servo to specific position
    tone(BUZZER_PIN, 1000, 500); // Sound buzzer at 1000 Hz for 500 ms
  } else {
    // Invalid UID
    digitalWrite(GREEN_LED_PIN, LOW);
    digitalWrite(YELLOW_LED_PIN, LOW);
    digitalWrite(RED_LED_PIN, HIGH);
    myServo.write(90); // Move servo to normal position
    tone(BUZZER_PIN, 500, 500); // Sound buzzer at 500 Hz for 500 ms
  }

  // Wait for a while before resetting to normal state
  delay(2000);
  digitalWrite(GREEN_LED_PIN, LOW);
  digitalWrite(RED_LED_PIN, LOW);
  digitalWrite(YELLOW_LED_PIN, HIGH);
  myServo.write(90); // Move servo to normal position

  // Halt PICC
  mfrc522.PICC_HaltA();
}

Last updated