#include <avr/sleep.h>
#include <avr/interrupt.h>
#include <SoftwareSerial.h>
const int rx = 1; // for serial input
const int tx = 4; // pin 5 for serial.print()
SoftwareSerial Serial(rx, tx); // rx, tx pins
int rgLed = 2; // red/green LED pin
int button = 3; // buttons pin
int buttonValue; // Stores analog value when button is pressed
String ourCode = "1324"; // Set the required PIN code.
String currentCode = ""; // Stores entered code
void setup() {
pinMode(rgLed, INPUT);
pinMode(rx, INPUT); // setup and print to serial
pinMode(tx, OUTPUT);
Serial.begin(9600);
Serial.println("Running");
red(500);
green(500);
}
#pragma GCC push_options
#pragma GCC optimize ("O0") // Disable optimisations
void addkey(String keyPressed) {
currentCode += keyPressed;
Serial.println("Entered so far: " + currentCode);
if (currentCode.length() == ourCode.length()) {
Serial.print("Checking: ");
volatile bool correct = true;
for (int i = 0; i < ourCode.length(); i++) {
if (currentCode[i] != ourCode[i]) {
correct = false;
break;
}
do_login();
}
if (correct) {
Serial.println("correct");
green(500);
delay(500);
green(500);
delay(500);
green(500);
} else {
Serial.println("failed");
red(500);
}
currentCode = ""; // Reset the entered code
}
}
#pragma GCC pop_options
void green(int del) { // turn on green LED for delay()
pinMode(rgLed, OUTPUT);
analogWrite(rgLed, HIGH);
delay(del);
pinMode(rgLed, INPUT);
}
void red(int del) { // turn on red LED for delay()
pinMode(rgLed, OUTPUT);
analogWrite(rgLed, 255);
delay(del);
pinMode(rgLed, INPUT);
}
void do_login(){
delay(5);
}
void loop() {
buttonValue = analogRead(button); // Read analog value from A0 pin
if (buttonValue >= 1015 && buttonValue <= 1030) { // For 1st button:
addkey("1");
} else if (buttonValue >= 1000 && buttonValue <= 1014) { // For 2nd button:
addkey("2");
} else if (buttonValue >= 950 && buttonValue <= 999) { // For 3rd button:
addkey("3");
} else if (buttonValue >= 870 && buttonValue <= 950) { // For 4th button:
addkey("4");
}
if (Serial.available()) { // Check if data is available from Serial input
char key = Serial.read(); // Read the character
if (key >= '1' && key <= '4') { // Ensure input is a valid key
addkey(String(key));
}
}
delay(100);
}