diff --git a/this_is_what_happens_when_you_hand_an_ardurino_to_a_sperg.cpp b/this_is_what_happens_when_you_hand_an_ardurino_to_a_sperg.cpp
new file mode 100644
index 0000000..f185e43
--- /dev/null
+++ b/this_is_what_happens_when_you_hand_an_ardurino_to_a_sperg.cpp
@@ -0,0 +1,277 @@
+#include <Servo.h>
+#include <Wire.h>
+#include <LiquidCrystal_I2C.h>
+#include <Keypad.h>
+
+#define ledGreen 10
+#define ledRed 11
+#define servo 12
+#define pir A0
+#define speaker A1
+
+//Keypadhoz
+char keymap[4][4] =
+{
+  {'1', '2', '3', 'A'},
+  {'4', '5', '6', 'B'},
+  {'7', '8', '9', 'C'},
+  {'*', '0', '#', 'D'}
+};
+
+byte rowPins[4] = {2, 3, 4, 5};
+byte colPins[4] = {6, 7, 8, 9};
+
+Keypad myKeypad = Keypad(makeKeymap(keymap), rowPins, colPins, 4, 4);
+
+Servo myservo;
+LiquidCrystal_I2C lcd(32, 16, 2);
+int pirValue = 0; // Riasztóhoz
+int previousMillis = 0;
+int interval = 150;
+int state = 0;
+char key;
+String code = "";
+int ledState = LOW;
+
+int offState() //Kikapcsolt állapot
+{
+  digitalWrite(ledGreen, LOW);
+  lcd.noBacklight();
+  lcd.clear();
+
+  while (true)
+  {
+    key = myKeypad.getKey();
+    if (key == 'D')
+    {
+      state = 1;
+      return state;
+    }
+  }
+  return 0;
+}
+
+int onState() //Bekapcsolt, nem készenléti állapot
+{
+  initialiseLCD();
+  myservo.write(180);
+  lcd.backlight();
+  lcd.print("Security code:");
+  lcd.setCursor(0, 1);
+  int wrongCodeCounter = 0;
+  
+  while (true)
+  {
+    key = myKeypad.getKey();
+    switch (key)
+    {
+      case 'D':
+      	state = 0;
+      	return state;
+      	break;
+      case 'C':
+      	initialiseLCD();
+      	break;
+      case 'A':
+      	if (code == "911")
+        {
+          state = 2;
+          return state;
+          break;
+        }
+        else
+        {
+          handleInvalidCode();
+          wrongCodeCounter++;
+          break;
+        }
+      default:
+        if (code.length() < 3 && key != NO_KEY)
+        {
+          code += key;
+          lcd.print(key);
+        }
+        if (wrongCodeCounter >= 3)
+        {
+          state = 4;
+          return state;
+          break;
+        }
+        break;
+    }
+  }
+  return 0;
+}
+
+int standbyState() //Bekapcsolt, készenléti állapot
+{
+  initialiseLCD();
+  lcd.print("Ready to serve");
+  myservo.write(0);
+
+  while (true)
+  {
+    key = myKeypad.getKey();
+    checkKey(key);
+    pirValue = analogRead(pir);
+    if (pirValue > 100)
+    {
+      state = 3;
+      return state;
+    }
+  }
+  return 1;
+}
+
+int alarmState() //Riasztási állapot
+{
+  initialiseLCD();
+  lcd.print("INTRUDER HERE");
+
+  while (true)
+  {
+    //LED + Hangszóró
+    unsigned long currentMillis = millis();
+    if (currentMillis - previousMillis >= interval)
+    {
+      previousMillis = currentMillis;
+      tone(speaker, 500, 100);
+      delay(300);
+      tone(speaker, 440, 150);
+      delay(300);
+      alarmLights();
+      digitalWrite(ledRed, ledState);
+    }
+
+    key = myKeypad.getKey();
+    checkKey(key);
+    if (state == 4)
+    {
+      return state;
+    }
+  }
+  return 1;
+}
+
+void lockDownState() // Lezárt riasztási állapot
+{
+  initialiseLCD();
+  lcd.print("CLOSED");
+
+  while (true)
+  {
+    //LED + Hangszóró
+    unsigned long currentMillis = millis();
+    if (currentMillis - previousMillis >= interval)
+    {
+      previousMillis = currentMillis;
+      tone(speaker, 440, 150);
+      alarmLights();
+      digitalWrite(ledRed, ledState);
+    }
+  }
+}
+
+void alarmLights()
+{
+  if (ledState == LOW)
+  {
+    ledState = HIGH;
+  }
+  else
+  {
+    ledState = LOW;
+  }
+}
+
+void initialiseLCD()
+{
+  lcd.clear();
+  code = "";
+  digitalWrite(ledGreen, LOW);
+  digitalWrite(ledRed, HIGH);
+}
+
+void checkKey(char key)
+{
+  int wrongCodeCounter = 0;
+  switch (key)
+  {
+    case 'D':
+      state = 1;
+      break;
+    case 'C':
+      initialiseLCD();
+      break;
+    case 'A':
+      if (code == "911")
+      {
+        state = 1;
+      }
+      else
+      {
+        handleInvalidCode();
+        wrongCodeCounter++;
+      }
+      break;
+    default:
+      if (code.length() < 3 && key != NO_KEY && key != 'D')
+      {
+        code += key;
+        lcd.print(key);
+      }
+      break;
+  }
+  if (wrongCodeCounter >= 3)
+  {
+    state = 4;
+  }
+}
+
+void handleInvalidCode()
+{
+  code = "";
+  lcd.clear();
+  lcd.print("Invalid code!");
+  delay(2000);
+  lcd.clear();
+  lcd.print("Try again!");
+  delay(2000);
+  lcd.clear();
+}
+
+void setup()
+{
+  Serial.begin(9600);
+  pinMode(ledGreen, OUTPUT);
+  pinMode(ledRed, OUTPUT);
+  pinMode(pir, INPUT);
+  pinMode(speaker, OUTPUT);
+  myservo.attach(servo);
+  lcd.begin();
+}
+
+void loop()
+{
+  switch (state)
+  {
+    case 0:
+	offState();
+        break;
+    case 1:
+	onState();
+	break;
+    case 2:
+	standbyState();
+	break;
+    case 3:
+	alarmState();
+	break;
+    case 4:
+	lockDownState();
+	break;
+    default:
+    	lcd.print("Guru meditation!");
+    	break;
+  }
+}
\ No newline at end of file