// Den Sketch habe ich aus anderen Sketchen, die ich im Internet gefunden habe, zusammengesetzt. // Sketch für Arduino Leonardo mit RFID Leser und Passworteingabe PC und Taster zum PC Sperren #include // wird benötigt, damit der Leonardo eine Tastatur simulieren kann unsigned long previousMillis = 0; // damit das Wort "previousMillis" verwendet werden kann const long interval = 180000; // entspricht 3 Minuten int ledState = LOW; // damit das Wort "ledState" verwendet werden kann #include SoftwareSerial RFID(10, 11); // GPIO 10 = TX vom RFID Empfänger, 11 = RX RFID = wird nicht benötigt int data1 = 0; int ok = -1; int tag1[14] = {2,50,57,21,48,54,60,51,65,70,49,13,68,3}; // Nummer RFID Tag 1 int tag2[14] = {2,48,12,48,55,67,69,25,55,68,55,68,56,3}; // Nummer RFID Tag 2 int newtag[14] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0}; // Wird zum Vergleich benötigt const long interval2 = 2000; // Damit nur einmal das PW ausgegeben wird unsigned long previousMillis2 = 0; unsigned long currentMillis2 = 0; void setup() { RFID.begin(9600); // Start serial für den RFID Leser Serial.begin(9600); // Start serial für Monitor pinMode(9, INPUT_PULLUP); // Taster Eingang pinMode(13, OUTPUT); // LED on Board Keyboard.begin(); // damit der Leonardo eine Tastatur simulieren kann } boolean comparetag(int aa[14], int bb[14]) { boolean ff = false; int fg = 0; for (int cc = 0 ; cc < 14 ; cc++) { if (aa[cc] == bb[cc]) { fg++; } } if (fg == 14) { ff = true; } return ff; } void checkmytags() // Vergleicht die RFID Tags { ok = 0; if (comparetag(newtag, tag1) == true) { ok++; } if (comparetag(newtag, tag2) == true) { ok++; } } void readTags() { ok = -1; if (RFID.available() > 0) { // Lesen der TAG Nr delay(100); for (int z = 0 ; z < 14 ; z++) { data1 = RFID.read(); newtag[z] = data1; } RFID.flush(); checkmytags(); } unsigned long currentMillis2 = millis(); if (ok > 0) // Wenn richtige RFID ID { if (currentMillis2 - previousMillis2 >= interval2) { Serial.println("Accepted"); Keyboard.press(KEY_LEFT_CTRL); Keyboard.releaseAll(); delay(100); Keyboard.press('1'); // Eingabe des PC Passwortes Anfang Keyboard.releaseAll(); Keyboard.press('2'); Keyboard.releaseAll(); Keyboard.press('3'); Keyboard.releaseAll(); Keyboard.press('4'); Keyboard.releaseAll(); Keyboard.press('5'); Keyboard.releaseAll(); Keyboard.press('6'); Keyboard.releaseAll(); Keyboard.press('7'); Keyboard.releaseAll(); Keyboard.press('8'); Keyboard.releaseAll(); Keyboard.press('9'); Keyboard.releaseAll(); Keyboard.press('1'); Keyboard.releaseAll(); Keyboard.press('2'); Keyboard.releaseAll(); Keyboard.press('3'); Keyboard.releaseAll(); Keyboard.press('4'); // Eingabe des PC Passwortes ende, länge anpassbar Keyboard.releaseAll(); Keyboard.press(176); Keyboard.releaseAll(); previousMillis2 = currentMillis2; } ok = -1; } else if (ok == 0) // Wenn falsche ID { Serial.println("Falsch"); ok = -1; } } void loop() { readTags(); // Alle 3 Minuten wird der Befehl Control an den PC gesendet, damit der PC nicht automatisch gesperrt wird unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; if (ledState == LOW) { ledState = HIGH; } else { ledState = LOW; } digitalWrite(13, ledState); Keyboard.press(KEY_LEFT_CTRL); Keyboard.releaseAll(); } // Ende Ale 3 Minuten // Wenn der Taster gedrückt wird wird der PC gesperrt if (digitalRead(9) == LOW) { Keyboard.press(KEY_LEFT_GUI); Keyboard.press('l'); delay(50); Keyboard.releaseAll(); delay(5000); } // Ende Taster }