Add src/arduino/whisperingSigth.ino
This commit is contained in:
		
							
								
								
									
										220
									
								
								src/arduino/whisperingSigth.ino
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										220
									
								
								src/arduino/whisperingSigth.ino
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,220 @@ | |||||||
|  | // Library Imports  | ||||||
|  |  | ||||||
|  | Written by the IP-Team 13  | ||||||
|  | E.S | ||||||
|  |  | ||||||
|  | #include <SoftwareSerial.h> | ||||||
|  | #include <DFRobotDFPlayerMini.h> | ||||||
|  | #include <Wire.h> | ||||||
|  | #include <Adafruit_PN532.h> | ||||||
|  |  | ||||||
|  | //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); | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user