diff --git a/src/arduino/rcVersion.ino b/src/arduino/rcVersion.ino new file mode 100644 index 0000000..e1be0d0 --- /dev/null +++ b/src/arduino/rcVersion.ino @@ -0,0 +1,173 @@ +// Library Imports + +// Written by the IP-Team 13 +// E.S +#include +#include +#include +#include + +//Pin Definition + +#define RST_PIN 9 // Pin für Reset beim RC522 +#define SS_PIN 10 // Pin für Slave Select beim RC522 + +// Modul-Object Initiation + +MFRC522 mfrc522(SS_PIN, RST_PIN); +SoftwareSerial mySerial(16, 17); +DFRobotDFPlayerMini mp3; + +// Setup + +void setup() { + + // Start Serial Connection + Serial.begin(115200); + mySerial.begin(9600); + SPI.begin(); + + // Start Module Objects + mfrc522.PCD_Init(); + + // Check MP3-Module + if (!mp3.begin(mySerial)) { + while (true) { + delay(0); + } + } + + // Set Volume + mp3.volume(30); + + // Check RC522 + Serial.println("Scan PICC to see UID, SAK, type, and data blocks..."); +} + + +// Loop + +void loop() { + + // Define Variables + uint8_t success; + uint8_t uid[MFRC522::MF_KEY_SIZE]; + uint8_t uidLength; + + // Look for new cards + if ( ! mfrc522.PICC_IsNewCardPresent() || ! mfrc522.PICC_ReadCardSerial()) { + delay(50); + return; + } + + // Read UID + uidLength = mfrc522.uid.size; + for (uint8_t i = 0; i < uidLength; i++) { + uid[i] = mfrc522.uid.uidByte[i]; + } + + // Analyse Data + for (uint8_t block = 7; block < 8; block++) { + byte data[18]; + byte dataSize = sizeof(data); + success = mfrc522.MIFARE_Read(block, data, &dataSize); + + if (success) { + // Get Hexadecimal Format + String firstByteAsString = String(data[0], HEX); + // Play Card Name + playCardName(firstByteAsString); + } + else { + // Error Handling + Serial.println("Read failed!"); + } + Serial.println(""); + } + + // Reduction of Workload + delay(1000); +} + +// Function : Handling Hexadecimal Format + +void playCardName(String hexMod) { + + // Copy the String + String kopie = hexMod; + + // Define Variables + int farbe, symbol; + + // Check the length of the String for leading zeros + if (hexMod.length() == 1) { + // Converting the Hexadecimal to a leading zero Format + hexMod = String("00" + hexMod).substring(hexMod.length(), hexMod.length() + 2); + // Setting the Color to Red + farbe = 0; + // Get the Charakter for the Symbol + int symbolChar = hexMod.charAt(1); + + // Check if the Symbol is one of the letters a to f + if (symbolChar >= 'a' && symbolChar <= 'f') { + // Calculate the decimal number for the letters from a to f + symbol = 10 + (symbolChar - 'a'); + } else { + // Calculate the Decimal Number of the Hexadecimal Number + symbol = hexMod.charAt(1)-'0'; + } + } + else { + farbe = hexMod.substring(0, 1).toInt(); + int symbolChar = hexMod.charAt(1); + + // Check if the Symbol is a letter between a and f + if (symbolChar >= 'a' && symbolChar <= 'f') { + symbol = 10 + (symbolChar - 'a'); + } else { + symbol = hexMod.substring(1, 2).toInt(); + } + } + + // Play the Corresponding Audiofile from the Storage + playCard(farbe, symbol); +} + +// Function: Playing the corresponding Audiofile for the Cardname + +void playCard(int farbNummer, int symbolNummer) { + + // First Switch : Check the Color + switch (farbNummer) { + case 0: mp3.play(16); break; // Red + case 1: mp3.play(17); break; // Yellow + case 2: mp3.play(18); break; // Blue + case 3: mp3.play(19); break; // Green + case 4: mp3.play(20); break; // black + } + + // Wait 2 Seconds to avoid Latency or Noises of the File + delay(2000); + + // Switch 2: Check the Symbol + switch (symbolNummer) { + case 0: mp3.play(1); break; // Zero + case 1: mp3.play(2); break; // One + case 2: mp3.play(3); break; // Two + case 3: mp3.play(4); break; // Three + case 4: mp3.play(5); break; // Four + case 5: mp3.play(6); break; // Five + case 6: mp3.play(7); break; // Six + case 7: mp3.play(8); break; // Seven + case 8: mp3.play(9); break; // Eight + case 9: mp3.play(10); break; // Nine + case 10: mp3.play(11); break; // Skip + case 11: mp3.play(12); break; // Reverse + case 12: mp3.play(13); break; // Draw 2 + case 13: mp3.play(15); break; // Draw 4 + case 14: mp3.play(14); break; // Color Change + } + + // Wait 1 Second to avoid noises and latency + delay(1000); +}