// RFID-Bibiothek (mfrc522)
# include <MFRC522.h>
// Anschlüsse definieren
# define CS1 10 // Chip Select
# define RST 9 // Reset
# define LED_GR 8
# define LED_GE 7
# define LED_RT 6
# define TASTER_ausgabe 5
# define TASTER_eingabe 4
// MOSI => 11 // Master Out/Slave In
// MISO => 12 // Master In /Slave Out
// SCK => 13 // Serial Clock
// RFID-Empfänger benennen
MFRC522 mfrc522(CS1, RST);
const int MAX = 1;
struct Buch {
String titel;
String autor;
String id;
bool ausgeliehen;
};
Buch buecher[MAX];
int buchCount = 0;
bool gefunden = false;
bool unknown = false;
int element = 0;
void neuesBuch() {
digitalWrite(LED_GR, LOW);
digitalWrite(LED_GE, LOW);
digitalWrite(LED_RT, HIGH);
Serial.println("----------------------------------------------------");
Serial.println("Neues Buch einlesen");
Serial.println("Buchtitel: ");
while (!Serial.available()) {
;
}
buecher[buchCount].titel = Serial.readString();
Serial.println(buecher[buchCount].titel);
Serial.println("Autor: ");
while (!Serial.available()) {
;
}
buecher[buchCount].autor = Serial.readString();
Serial.println(buecher[buchCount].autor);
buecher[buchCount].ausgeliehen = false;
Serial.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
Serial.println("Folgendes Buch wurde aufgenommen:");
Serial.print("Titel: ");
Serial.println(buecher[buchCount].titel);
Serial.print("Autor: ");
Serial.println(buecher[buchCount].autor);
Serial.print("ID:");
Serial.println(buecher[buchCount].id);
Serial.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
buchCount += 1;
digitalWrite(LED_GR, LOW);
digitalWrite(LED_GE, LOW);
digitalWrite(LED_RT, LOW);
}
void ausgabeBib() {
digitalWrite(LED_GR, LOW);
digitalWrite(LED_GE, LOW);
digitalWrite(LED_RT, LOW);
Serial.println("****************************************************");
switch (buchCount) {
case 0:
Serial.println("Aktuell sind keine Buecher registriert :(");
break;
case 1:
Serial.println("Aktuell ist nur folgendes Buch registriert:");
break;
default:
Serial.print("Aktuell sind folgende ");
Serial.print(buchCount);
Serial.println(" Buecher registriert:");
break;
}
for (int j = 0; j < buchCount; j++) {
Serial.println("****************************************************");
Serial.print("Buch ");
Serial.print(j + 1);
Serial.println(":");
Serial.print("Buchtitel: ");
Serial.println(buecher[j].titel);
Serial.print("Autor: ");
Serial.println(buecher[j].autor);
Serial.print("ID :");
Serial.println(buecher[j].id);
Serial.print("Status: ");
if (buecher[j].ausgeliehen == true) {
Serial.println(" ausgeliehen");
}
else {
Serial.println(" nicht ausgeliehen");
}
}
Serial.println("****************************************************");
}
void setup()
{
Serial.begin(9600);
SPI.begin();
// Initialisierung des RFID-Empfängers
mfrc522.PCD_Init();
pinMode(LED_GR, OUTPUT);
pinMode(LED_GE, OUTPUT);
pinMode(LED_RT, OUTPUT);
pinMode(TASTER_ausgabe, INPUT_PULLUP);
pinMode(TASTER_eingabe, INPUT_PULLUP);
digitalWrite(LED_GR, LOW);
digitalWrite(LED_GE, LOW);
digitalWrite(LED_RT, LOW);
Serial.println("***********************************************************************");
Serial.println("* RFID-Buchverwaltung *");
Serial.println("* Zum Einlesen neuer Buecher druecken Sie den entsprechenden Taster *");
Serial.println("***********************************************************************");
Serial.println(" ");
}
void loop()
{
String WertHEX = " ";
String WertDEZ = " ";
gefunden = false;
unknown = false;
if (digitalRead(TASTER_eingabe) == LOW) {
Serial.println("Bitte legen Sie ein Buch auf den Scanner");
while (!mfrc522.PICC_IsNewCardPresent() or !mfrc522.PICC_ReadCardSerial()) {
;
}
for (byte i = 0; i < mfrc522.uid.size; i++) {
WertDEZ = WertDEZ + String(mfrc522.uid.uidByte[i], DEC) + " ";
}
//Serial.println("ID eingelesen");
for (int a = 0; a <= buchCount; a++) {
if (WertDEZ == buecher[a].id) {
gefunden = true;
element = a;
break;
}
else {
unknown = true;
}
}
if (gefunden == true) {
if (buecher[element].ausgeliehen == false) {
buecher[element].ausgeliehen = true;
digitalWrite(LED_GR, LOW);
digitalWrite(LED_GE, HIGH);
digitalWrite(LED_RT, LOW);
Serial.println("----------------------------------------------------");
Serial.print("Buch ");
Serial.print(element + 1);
Serial.print(": ");
Serial.println(buecher[element].titel);
Serial.print("Autor: ");
Serial.println(buecher[element].autor);
Serial.println("Status: ausgeliehen");
Serial.println("----------------------------------------------------");
gefunden = false;
unknown = false;
}
else {
buecher[element].ausgeliehen = false;
digitalWrite(LED_GR, HIGH);
digitalWrite(LED_GE, LOW);
digitalWrite(LED_RT, LOW);
Serial.println("----------------------------------------------------");
Serial.print("Buch ");
Serial.print(element + 1);
Serial.print(": ");
Serial.println(buecher[element].titel);
Serial.print("Autor: ");
Serial.println(buecher[element].autor);
Serial.println("Status: nicht ausgeliehen");
Serial.println("----------------------------------------------------");
gefunden = false;
unknown = false;
}
}
if (unknown == true && buchCount >= MAX) {
digitalWrite(LED_GR, LOW);
digitalWrite(LED_GE, LOW);
digitalWrite(LED_RT, HIGH);
Serial.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
Serial.println("Die maximale Kapazitaet wurde erreicht, es koennen keine neuen Buecher registriert werden.");
Serial.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
}
if (unknown == true && buchCount < MAX) {
buecher[buchCount].id = WertDEZ;
neuesBuch();
}
}
if (digitalRead(TASTER_ausgabe) == LOW) {
ausgabeBib();
}
delay(50);
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5