From b83ff13fc926eb84410272fe7882adc9a77c224c Mon Sep 17 00:00:00 2001 From: Eyuep Sueyruege Date: Fri, 2 Feb 2024 19:23:00 +0100 Subject: [PATCH] Add src/arduino/whisperingSigth.ino --- src/arduino/whisperingSigth.ino | 220 ++++++++++++++++++++++++++++++++ 1 file changed, 220 insertions(+) create mode 100644 src/arduino/whisperingSigth.ino diff --git a/src/arduino/whisperingSigth.ino b/src/arduino/whisperingSigth.ino new file mode 100644 index 0000000..b769c1e --- /dev/null +++ b/src/arduino/whisperingSigth.ino @@ -0,0 +1,220 @@ +// Library Imports + +Written by the IP-Team 13 +E.S + +#include +#include +#include +#include + +//Pin Definition + +#define SDA_PIN 21 // Pin für SDA beim PN532 +#define SCL_PIN 22 // Pin für SCL beim PN532 +#define RSTO_PIN 5 // Pin für SDA beim PN532 +#define IRQ_PIN 18 // Pin für SCL beim PN532 + +// Modul-Object Initiation + +Adafruit_PN532 nfc(IRQ_PIN, RSTO_PIN); +SoftwareSerial mySerial(16, 17); +DFRobotDFPlayerMini mp3; + +// Setup + +void setup() { + +// Start Serial Connection + + Serial.begin(115200); + mySerial.begin(9600); + +// Start Module Objects + + Wire.begin(); + nfc.begin(); + + +// Check MP3-Module + + if (!mp3.begin(mySerial)) { + while (true) { + delay(0); + } + } + +// Set Volume + + mp3.volume(30); + + +// Check PN532 + + uint32_t versionData = nfc.getFirmwareVersion(); + if (!versionData) { + Serial.println("Didn't find PN53x board"); + while (1); + } +} + + +// Loop + +void loop() { + +// Define Variables + + uint8_t success; + uint8_t uid[] = {0, 0, 0, 0, 0, 0, 0}; + uint8_t uidLength; + +// Read NFC + + success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength); + + + if (success) { + +// Analyse Data + + for (uint8_t block = 7; block < 8; block++) { + uint8_t data[16]; + success = nfc.mifareclassic_ReadDataBlock(block, data); + + 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 letter s 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 { + + // Define Variables + + 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') { + // Wenn das Symbol eine der Zeichen 'A' bis 'F' ist, ordne es richtig zu + symbol = 10 + (symbolChar - 'a'); + } else { + + // Covert the String to a Decimal Number + symbol = hexMod.substring(1, 2).toInt(); + } + } + +// Play the Corrosponding Audiofile from the Storage + + playCard(farbe, symbol); +} + + + +// Function: Playing the corrosponding 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 Seconds to avoid noises and latency + + delay(1000); +}