#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Keypad.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
const byte ROWS = 4; // Four rows
const byte COLS = 4; // Four columns
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6}; // Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
byte colPins[COLS] = {5, 4, 3, 2}; // Connect keypad COL0, COL1, COL2 and COL3 to these Arduino pins.
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
const int buttonPin = 10; // Pin til knappen
const int targetClicks = 5; // antall klikk for å løse oppgaven
const unsigned long timerDuration = 10000; // millisekunder nedtelling
const String correctCode = "1234"; // Endre denne til nøkkelen som åpner ditt Escape room
int nesteRom = 5678; // Endre denne til koden for å åpne neste Escape room
bool tilgangGitt = false; // Denne variabelen forteller om du har tastat inn riktig nøkkel for å få tilgang på Escaperoomet ditt.
unsigned long timerStart = 0;
int clickCount = 0;
void setup() {
Serial.begin(9600);
pinMode(buttonPin, INPUT_PULLUP);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.setRotation(2);
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
display.setTextSize(1);
display.setCursor(0,0);
display.println("Skriv inn kode:");
display.display();
}
void loop() {
if (!tilgangGitt) { // If IKKE tilgangGitt (! betyr ikke)
char nyKode[5] = {'\0'};
byte nummerTeller = 0;
display.clearDisplay();
display.setCursor(0,0);
display.println("Skriv inn kode:");
display.display();
while (nummerTeller < 4) {
char key = keypad.getKey();
if (key) {
Serial.println(key);
nyKode[nummerTeller++] = key;
display.setCursor(nummerTeller * 6, 10);
display.print('*'); // Viser * i stedet for ekte tall som et passord
// display.setCursor(0,30); // Hvis du vil vise tallene du skriver inn i stedet for *
// display.println(nyKode);
display.display();
}
}
if (String(nyKode) == correctCode) {
tilgangGitt = true;
display.clearDisplay();
display.setCursor(0,0);
display.println("Gratulerer!");
display.display();
// Run your function here
delay(2000);
nyttSpill();
}
else {
display.clearDisplay();
display.setCursor(0,0);
display.println("FEIL KODE!");
display.display();
delay(2000);
}
}
else {
unsigned long currentTime = millis();
unsigned long elapsedTime = currentTime - timerStart;
if (elapsedTime >= timerDuration) {
if (clickCount == targetClicks) {
display.clearDisplay();
display.setCursor(0,0);
display.println("YAY Koden er:");
display.setCursor(10,30);
display.println(nesteRom);
display.display();
} else {
display.clearDisplay();
display.setCursor(0,0);
display.println("DU FEILA!");
display.display();
clickCount = 0;
delay(2000);
nyttSpill();
}
} else {
int buttonState = digitalRead(buttonPin);
if (buttonState == LOW) { // Knappen er klikka (LOW siden vi bruker PULLUP)
clickCount++;
display.clearDisplay();
display.setCursor(0,0);
display.print("Hold tellingen!");
display.display();
delay(300); // Denne delayen passer på at et klikk ikke blir registrert mer enn en gang
}
}
}
}
void nyttSpill(){
display.clearDisplay();
display.setCursor(0,0);
display.println("Trykk paa knapp");
display.setCursor(0,20);
display.print(targetClicks);
display.println(" Ganger");
display.setCursor(0,40);
display.println("Men ikke for seint eller for fort");
timerStart = millis();
clickCount = 0;
display.display();
}