Upload files to "/"
This commit is contained in:
commit
0783f995ff
284
sz_f1.ino
Normal file
284
sz_f1.ino
Normal file
|
@ -0,0 +1,284 @@
|
|||
#include <LiquidCrystal_I2C.h>
|
||||
LiquidCrystal_I2C lcd(0x20,16,2);
|
||||
|
||||
#include <Keypad.h>
|
||||
const byte numRows = 4;
|
||||
const byte numCols = 4;
|
||||
char keymap[numRows][numCols] = {
|
||||
{'1', '2', '3', 'A'},
|
||||
{'4', '5', '6', 'B'},
|
||||
{'7', '8', '9', 'C'},
|
||||
{'*', '0', '#', 'D'}
|
||||
};
|
||||
byte rowPins[numRows] = {13, 12, 11, 10};
|
||||
byte colPins[numCols] = {9, 8, 7, 6};
|
||||
Keypad keypad = Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols);
|
||||
|
||||
#include <Servo.h>
|
||||
Servo servo;
|
||||
|
||||
//leds
|
||||
const int greenLed = 1;
|
||||
const int ledArray[6] = {2, 3, 4, 5, 6, 7};
|
||||
const int redLed = 8;
|
||||
|
||||
// constants
|
||||
const int registerInput = 1;
|
||||
const int outputRegister = 2;
|
||||
const int shiftRegister = 3;
|
||||
const int piezo = 4;
|
||||
const int servoPin = 5;
|
||||
|
||||
// variables
|
||||
bool locked = true;
|
||||
bool showPassword = false;
|
||||
bool alarmed = false;
|
||||
int attempts = 5;
|
||||
String password = "";
|
||||
String masterkey = "";
|
||||
char key;
|
||||
|
||||
void setup() {
|
||||
lcd.init();
|
||||
lcd.clear();
|
||||
lcd.backlight();
|
||||
pinMode(registerInput, OUTPUT);
|
||||
pinMode(outputRegister, OUTPUT);
|
||||
pinMode(shiftRegister, OUTPUT);
|
||||
pinMode(piezo, OUTPUT);
|
||||
servo.write(0);
|
||||
servo.attach(servoPin);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
if (alarmed) {
|
||||
lcd.clear();
|
||||
lcd.print("Enter masterkey:");
|
||||
alarmedLoop();
|
||||
} else if (locked) {
|
||||
ledMode(greenLed, LOW);
|
||||
ledMode(redLed, HIGH);
|
||||
lcd.clear();
|
||||
lcd.print("Enter password:");
|
||||
lockedLoop();
|
||||
} else {
|
||||
ledMode(redLed, LOW);
|
||||
ledMode(greenLed, HIGH);
|
||||
lcd.clear();
|
||||
lcd.print("Press A to lock");
|
||||
unlockedLoop();
|
||||
}
|
||||
}
|
||||
|
||||
void lockedLoop() {
|
||||
while (locked) {
|
||||
key = keypad.getKey();
|
||||
if (key != NO_KEY) {
|
||||
if (key >= '0' && key <= '9') {
|
||||
if (password.length() <= 16) {
|
||||
buzz();
|
||||
password += key;
|
||||
} else {
|
||||
error();
|
||||
}
|
||||
}
|
||||
if (key == '*') {
|
||||
buzz();
|
||||
password = "";
|
||||
}
|
||||
if (key == '#') {
|
||||
buzz();
|
||||
password = password.substring(0, password.length() - 1);
|
||||
}
|
||||
if (key == 'A') {
|
||||
checkPassword();
|
||||
}
|
||||
if (key == 'D') {
|
||||
buzz();
|
||||
showPassword = !showPassword;
|
||||
}
|
||||
clearLine(1, 0);
|
||||
if (showPassword) {
|
||||
lcd.print(password);
|
||||
} else {
|
||||
for (int i = 0; i < password.length(); i++) {
|
||||
lcd.print('*');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void unlockedLoop() {
|
||||
Serial.println("unlockedLoop");
|
||||
while (!locked) {
|
||||
key = keypad.getKey();
|
||||
if (key != NO_KEY && key == 'A') {
|
||||
lock();
|
||||
locked = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void alarmedLoop() {
|
||||
while (alarmed) {
|
||||
alarm(500, 200);
|
||||
key = keypad.getKey();
|
||||
if (key != NO_KEY) {
|
||||
if (key >= '0' && key <= '9') {
|
||||
if (masterkey.length() < 16) {
|
||||
buzz();
|
||||
masterkey += key;
|
||||
} else {
|
||||
error();
|
||||
}
|
||||
}
|
||||
if (key == '*') {
|
||||
buzz();
|
||||
masterkey = "";
|
||||
}
|
||||
if (key == '#') {
|
||||
buzz();
|
||||
masterkey = masterkey.substring(0, masterkey.length() - 1);
|
||||
}
|
||||
if (key == 'A') {
|
||||
checkMasterkey();
|
||||
}
|
||||
if (key == 'D') {
|
||||
buzz();
|
||||
showPassword = !showPassword;
|
||||
}
|
||||
clearLine(1, 0);
|
||||
if (showPassword) {
|
||||
lcd.print(masterkey);
|
||||
} else {
|
||||
for (int i = 0; i < masterkey.length(); i++) {
|
||||
lcd.print('*');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void checkPassword() {
|
||||
if (password == "1258") {
|
||||
locked = false;
|
||||
password = "";
|
||||
attempts = 5;
|
||||
unlock();
|
||||
} else {
|
||||
attempts--;
|
||||
if (attempts != 0) {
|
||||
error();
|
||||
lcd.clear();
|
||||
lcd.print("Wrong password!");
|
||||
delay(1000);
|
||||
lcd.clear();
|
||||
lcd.print("Remaining");
|
||||
lcd.setCursor(0, 1);
|
||||
lcd.print("attempts: ");
|
||||
lcd.print(attempts);
|
||||
delay(1000);
|
||||
lcd.clear();
|
||||
lcd.print("Enter password:");
|
||||
} else {
|
||||
alarmed = true;
|
||||
locked = false;
|
||||
password = "";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void checkMasterkey() {
|
||||
if (masterkey == "7852") {
|
||||
alarmed = false;
|
||||
locked = true;
|
||||
masterkey = "";
|
||||
attempts = 5;
|
||||
noTone(piezo);
|
||||
} else {
|
||||
lcd.clear();
|
||||
lcd.print("Wrong masterkey!");
|
||||
delay(1000);
|
||||
lcd.clear();
|
||||
lcd.print("Enter masterkey:");
|
||||
}
|
||||
}
|
||||
|
||||
void unlock() {
|
||||
tone(piezo, 1000, 1000);
|
||||
digitalWrite(redLed, LOW);
|
||||
digitalWrite(greenLed, HIGH);
|
||||
lcd.clear();
|
||||
lcd.setCursor(4, 0);
|
||||
lcd.print("Unlocked");
|
||||
servo.write(90);
|
||||
delay(1000);
|
||||
}
|
||||
|
||||
void lock() {
|
||||
tone(piezo, 1000, 1000);
|
||||
digitalWrite(greenLed, LOW);
|
||||
digitalWrite(redLed, HIGH);
|
||||
lcd.clear();
|
||||
lcd.setCursor(5, 0);
|
||||
lcd.print("Locked");
|
||||
servo.write(0);
|
||||
delay(1000);
|
||||
}
|
||||
|
||||
void alarm(int hertz, int timing) { //CHATGPT for the millis and led algorithm
|
||||
static unsigned long previousMillis = 0;
|
||||
static bool state = false;
|
||||
static int ledIndex = 0;
|
||||
static bool directionForward = true;
|
||||
unsigned long currentMillis = millis();
|
||||
if (currentMillis - previousMillis >= timing) {
|
||||
previousMillis = currentMillis;
|
||||
if (state) {
|
||||
tone(piezo, hertz + 100);
|
||||
} else {
|
||||
tone(piezo, hertz - 100);
|
||||
}
|
||||
state = !state;
|
||||
for (int i = 0; i < 6; i++) {
|
||||
ledMode(ledArray[i], LOW);
|
||||
}
|
||||
ledMode(ledArray[ledIndex], HIGH);
|
||||
if (directionForward) {
|
||||
ledIndex++;
|
||||
if (ledIndex >= 6) {
|
||||
directionForward = false;
|
||||
}
|
||||
} else {
|
||||
ledIndex--;
|
||||
if (ledIndex < 0) {
|
||||
directionForward = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ledMode(int ledNumber, bool state) { //CHATGPT for shift register
|
||||
digitalWrite(outputRegister, LOW);
|
||||
byte data = 0;
|
||||
if (ledNumber >= 1 && ledNumber <= 8) {
|
||||
data = state ? (1 << (ledNumber - 1)) : 0;
|
||||
}
|
||||
shiftOut(registerInput, shiftRegister, MSBFIRST, data);
|
||||
digitalWrite(outputRegister, HIGH);
|
||||
}
|
||||
|
||||
void clearLine(int l, int c) {
|
||||
lcd.setCursor(0, l);
|
||||
lcd.print(" ");
|
||||
lcd.setCursor(c, l);
|
||||
}
|
||||
|
||||
void buzz() {
|
||||
tone(piezo, 1000, 100);
|
||||
}
|
||||
|
||||
void error() {
|
||||
tone(piezo, 500, 500);
|
||||
}
|
Loading…
Reference in New Issue
Block a user