1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 | #include “Adafruit_Keypad.h” int LAUTSPRECHER = 13; // Größe des Tastenfeldes // 3 Spalten const byte SPALTEN = 3; // 4 Zeilen const byte REIHEN = 4; // die Ziffern/Zeichen: // Array 3 x 4 char Tasten[REIHEN][SPALTEN] = { { ‘#’, ‘0’, ‘*’ }, { ‘9’, ‘8’, ‘7’ }, { ‘6’, ‘5’, ‘4’ }, { ‘3’, ‘2’, ‘1’ } }; // die Pins für die 3 Spalten byte SpaltenPins[SPALTEN] = { 3, 4, 5 }; // die Pins für die 4 Zeilen byte ReihenPins[REIHEN] = { 6, 7, 8, 9 }; // TastenFeld ⇒ Name des Keypads // -> Zuordnung der Pins zu den REIHEN und SPALTEN des Arrays Adafruit_Keypad Tastenfeld = Adafruit_Keypad(makeKeymap(Tasten), ReihenPins, SpaltenPins, REIHEN, SPALTEN); String Vergleich; String Pin; // char-Array für die eingegebenen Zeichen char Zeichen[5]; int Position = 0; void setup() { // Tastenfeld starten Tastenfeld.begin(); pinMode(LAUTSPRECHER, OUTPUT); Serial.begin(9600); // auf serielle Verbindung warten while (!Serial) {;} delay(500); // nur beim Start anzeigen Serial.println(“Bitte 4‑stelligen Pin eingeben:”); Serial.println(“Pin-Eingabe mit # abschlie\u00dfen”); Serial.println(“Korrektur mit * ”); // Zufallsgenerator starten randomSeed(analogRead(A0)); // neuen Pin erstellen neuerPin(); } void loop() { // gedrückte Taste lesen Tastenfeld.tick(); while (Tastenfeld.available()) { keypadEvent Taste = Tastenfeld.read(); // wenn die Taste losgelassen wurde if (Taste.bit.EVENT == KEY_JUST_RELEASED) { tone(LAUTSPRECHER, 1000); delay(50); noTone(LAUTSPRECHER); // eingegebenes Zeichen an der aktuellen Position speichern Zeichen[Position] = (char)Taste.bit.KEY; // Zeichen anzeigen Serial.print(Zeichen[Position]); // nächstes Zeichen -> Position erhöhen Position ++; // Korrektur ASCII-Wert 42 = * if (Taste.bit.KEY == 42) { // char-Array Zeichen leeren for (int i = 0; i < sizeof(Zeichen); i++) { Zeichen[i] = NULL; } Position = 0; Serial.println(“\tKorrektur: ”); } // Zeichen ASCII-Wert 35 = # if (Taste.bit.KEY == 35) { // char-Array in String umwandeln Vergleich = String(Zeichen); // letzte Zeichen des Strings sind 0 und # -> müssen entfernt werden Vergleich = Vergleich.substring(0, Vergleich.length() - 2); Serial.println(); Serial.print(Vergleich); // Eingabe mit Pin vergleichen if (Vergleich == Pin) { Serial.println(“\tPin ist korrekt — Zugriff”); } else Serial.println(“\tFalscher Pin — kein Zugriff”); // Variable zurücksetzen Position = 0; // neuen Pin erstellen neuerPin(); } } } } String neuerPin() { // zufälligen PIN bestimmen Pin = “”; Serial.println(“—————————————”); for (int i = 0; i < sizeof(Zeichen) - 1; i++) { int Zahl = random(0, 10); Pin = Pin + String(Zahl); } // Pin anzeigen Serial.println(“neuer Pin: ” + Pin); return Pin; } |
Letzte Aktualisierung: