Hallo zusammen. Ich habe hier ein Skript angehängt. Ich habe das Problem, dass ich keine Deutsch-Schweiz Tastaturausgabe über die Library realisieren kann. Es ist wichtig, dass ich die Zeichen $, !, und @ als Tastatureingaben verwenden kann. Zur Beschreibung des Projekts: Das Leonardo-Board verfügt über ein RC522 Lesegerät. Nun zum Beginn: Das Lesegerät erkennt einen hinterlegten RFID-Chip. Falls dieser der richtige ist, gibt es das Passwort als Tastatureingabe aus und bestätigt mit Enter. Falls der RFID-Chip nicht hinterlegt ist, gibt es einen Tastaturfehler aus. Um einen RFID-Chip am Gerät zu hinterlegen, gibt man 'Neu' oder 'neu' ein. Dann sucht es nach einem RFID-Chip, und wenn dieser gefunden wird, wird er in einer Variable gespeichert. Danach wird auf eine serielle Eingabe gewartet, wo man das Passwort eingeben kann. Auch dieses wird in Variablen gespeichert. Alle zwei Variablen werden im EEPROM hinterlegt, falls ein Stromausfall auftritt, um sicherzustellen, dass diese beiden Informationen nicht verloren gehen. Weiß jemand, wie ich das Problem über das Skript lösen kann oder das Skript anpassen kann? Ich wäre auch bereit, für diese Hilfe etwas zu geben.
#include <Keyboard.h>
#include <SPI.h>
#include <MFRC522.h>
#include <EEPROM.h>
const int ledPin = 13; //----- Bestimmt welche Pin zuständig ist für LED-----
#define RST_PIN 9
#define SS_PIN 10
MFRC522 mfrc522(SS_PIN, RST_PIN); // -----Create MFRC522 instance.-----
String Variable1; // -----RFID ID-----
String Variable2; // -----zu schreibendes Passwort-----
boolean program1Active = true; // -----Schaltet beim 1 mal stromzufuhr Program 1 ein-----
void setup() {
Serial.begin(9600); //----- Initiate a serial communication-----
SPI.begin(); // -----Initiate SPI bus-----
mfrc522.PCD_Init(); // -----Initiate MFRC522-----
Keyboard.begin(); // -----Initiate Keyboard library-----
pinMode(ledPin, OUTPUT); //----- Bestimmt das LED ein Ausgang ist -----
readFromEEPROM(); //-----Lesen des EEPROM Speicher-----
}
void loop() {
if (program1Active) {
program1(); //-----Prüft ob CHIP im Kartenleser hinterlegt ist-----
} else {
program2(); //-----Zu Progammierung des RFID ID und zum zuweisen des Passwort-----
}
}
void program1() {
//-----Check die RFID chip-----
if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()) {
String rfid = getRFID(mfrc522.uid.uidByte);
Serial.println("RFID Chip gefunden: " + rfid);
//-----bei Regstristiertem CHIP-----
if (rfid.equals(Variable1)) {
Keyboard.println(Variable2);
delay(500);
Keyboard.write(KEY_RETURN);
digitalWrite(ledPin, true); //-----Led für 2 Sekunden ein-----
delay(2000);
digitalWrite(ledPin, false);
}
else {
//-----bei nicht regristierem CHIP-----
Keyboard.println("Fehler"); //-----Ausgabe per Keyboard Fehler und blinken der LED-----
digitalWrite(ledPin, true);
delay(100);
digitalWrite(ledPin, false);
delay(100);
digitalWrite(ledPin, true);
delay(100);
digitalWrite(ledPin, false);
delay(100);
digitalWrite(ledPin, true);
delay(100);
digitalWrite(ledPin, false);
delay(100);
digitalWrite(ledPin, true);
delay(100);
digitalWrite(ledPin, false);
delay(100);
digitalWrite(ledPin, true);
delay(100);
digitalWrite(ledPin, false);
delay(100);
digitalWrite(ledPin, true);
delay(100);
digitalWrite(ledPin, false);
delay(100);
digitalWrite(ledPin, true);
delay(100);
digitalWrite(ledPin, false);
delay(100);
digitalWrite(ledPin, true);
delay(100);
digitalWrite(ledPin, false);
delay(100);
digitalWrite(ledPin, true);
delay(100);
digitalWrite(ledPin, false);
delay(100);
digitalWrite(ledPin, true);
delay(100);
digitalWrite(ledPin, false);
delay(100);
}
}
//-----Überprüft den seriellen eingang auf das Neu & und neu für Program 2 zu starten -----
if (Serial.available() > 0) {
String input = Serial.readString();
input.trim();
if ((input.equals("Neu")) || (input.equals("neu"))) {
program1Active = false;
Serial.println("Editor Untermenu"); //-----Gibt serielle ausgabe aus damit man weiss das mann ins Untermenü gelangt-----
}
}
}
void program2() {
String rfid;
String newPassword;
Serial.println("Chip wird gesucht."); //-----Gibt serielle ausgabe Chip wird gesucht-----
//-----RFID suchen-----
while (!rfid.length()) {
if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()) { //-----Fals Chip gefunden und Chip ID gelesen in Variable rfid schreiben-----
rfid = getRFID(mfrc522.uid.uidByte);
}
}
Serial.println("RFID Chip gefunden: " + rfid);
Serial.println("Neues Passwort eingeben: ");
//-----Wartet auf Serielle eingabe ( Passwort )-----
while (!Serial.available()) {}
newPassword = Serial.readString();
newPassword.trim();
//-----Schreibt new Passwort in die Variable 2 und RFID in Variable 1-----
Variable1 = rfid;
Variable2 = newPassword;
program1Active = true;
Serial.println("Passwort gespeichert, kann jetzt verwendet werden.");
writeToEEPROM();
}
//-----Schreibt alle Variablen in die EEPROM-----
String getRFID(byte* uid) {
String rfid = "";
for (byte i = 0; i < 4; i++) {
rfid += String(uid[i], HEX);
}
mfrc522.PICC_HaltA();
return rfid;
}
void readFromEEPROM() {
int addr = 0;
byte dataLen = EEPROM.read(addr);
addr++;
for (byte i = 0; i < dataLen; i++) {
Variable1 += (char)EEPROM.read(addr);
addr++;
}
dataLen = EEPROM.read(addr);
addr++;
for (byte i = 0; i < dataLen; i++) {
Variable2 += (char)EEPROM.read(addr);
addr++;
}
}
void writeToEEPROM() {
int addr = 0;
byte dataLen = Variable1.length();
EEPROM.write(addr, dataLen);
addr++;
for (byte i = 0; i < dataLen; i++) {
EEPROM.write(addr, Variable1[i]);
addr++;
}
dataLen = Variable2.length();
EEPROM.write(addr, dataLen);
addr++;
for (byte i = 0; i < dataLen; i++) {
EEPROM.write(addr, Variable2[i]);
addr++;
}
}