before using User lib
This commit is contained in:
+1
-1
@@ -92,7 +92,7 @@ void Interface::render()
|
||||
this->_lcd.clear();
|
||||
this->_lcd.print("Please enter Pin");
|
||||
this->_lcd.setCursor(0, 1);
|
||||
this->_pin_number.concat(this->_keyboard->getString());
|
||||
this->_pin_number = this->_keyboard->getString();
|
||||
this->_lcd.print("Pin: " + _pin_number);
|
||||
this->_display_state = 2;
|
||||
this->_displayUpdate = false;
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
#include "Users.h"
|
||||
|
||||
Users::Users(/* args */)
|
||||
{
|
||||
this->userdb.insert(user_account{.uid = 012345, .first_name = "John", .last_name = "Doe", .rfid_uid = "8C 75 6C 17", .user_pin = "2424"});
|
||||
this->userdb.insert(user_account{.uid = 010202, .first_name = "Max", .last_name = "Mustermann and Sons", .rfid_uid = "D3 4E 03 0B", .user_pin = "1212"});
|
||||
}
|
||||
|
||||
Users::~Users()
|
||||
{
|
||||
}
|
||||
bool Users::checkPin(String pin_code, std::vector<Users::User> *logon_users)
|
||||
{
|
||||
std::copy_if(this->userdb.begin(), this->userdb.end(), inserter(*logon_users,logon_users->end()), [=](user_account user)
|
||||
{ return pin_code == user.user_pin; });
|
||||
return (logon_users->size()>0);
|
||||
}
|
||||
|
||||
bool Users::checkRfid(String rfid_code, std::vector<Users::User> *logon_users)
|
||||
{
|
||||
std::copy_if(this->userdb.begin(), this->userdb.end(), inserter(*logon_users,logon_users->end()), [=](user_account user)
|
||||
{ return rfid_code == user.rfid_uid; });
|
||||
return (logon_users->size()>0);
|
||||
}
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
#pragma once
|
||||
#include <Arduino.h>
|
||||
#include <set>
|
||||
#include <vector>
|
||||
class Users
|
||||
{
|
||||
typedef struct User
|
||||
{
|
||||
unsigned long uid;
|
||||
String first_name;
|
||||
String last_name;
|
||||
String rfid_uid;
|
||||
String user_pin;
|
||||
bool operator < (const User &o) const { return uid <o.uid; }
|
||||
bool operator == (const User &o) const { return uid ==o.uid; }
|
||||
} user_account;
|
||||
|
||||
private:
|
||||
std::set<User> userdb;
|
||||
|
||||
/* data */
|
||||
public:
|
||||
Users(/* args */);
|
||||
~Users();
|
||||
bool checkRfid(String rfid_code, std::vector<Users::User> *logon_users);
|
||||
bool checkPin(String pin_code, std::vector<Users::User> *logon_users);
|
||||
};
|
||||
+23
-17
@@ -4,8 +4,9 @@
|
||||
#include "Keyboard.h"
|
||||
#include "Rfid.h"
|
||||
#include "Interface.h"
|
||||
#include <ESP8266WiFi.h>
|
||||
#include <vector>
|
||||
|
||||
#include "Users.h"
|
||||
// Rfid
|
||||
Rfid rfid;
|
||||
// i2C Bus
|
||||
@@ -14,6 +15,10 @@ Rfid rfid;
|
||||
|
||||
Keyboard keyboard(200);
|
||||
Interface iface;
|
||||
// Wifi control
|
||||
IPAddress local_IP(192,168,4,22);
|
||||
IPAddress gateway(192,168,4,9);
|
||||
IPAddress subnet(255,255,255,0);
|
||||
|
||||
// User DB
|
||||
|
||||
@@ -30,7 +35,9 @@ void setup()
|
||||
{
|
||||
Serial.begin(9600);
|
||||
Serial.print("Starting");
|
||||
delay(500);
|
||||
Serial.println(WiFi.softAPConfig(local_IP, gateway, subnet) ? "Ready" : "Failed!");
|
||||
Serial.println(WiFi.softAP("Doorlock") ? "Ready" : "Failed!");
|
||||
//delay(500);
|
||||
keyboard.begin(&Wire);
|
||||
rfid.begin();
|
||||
iface.begin(&keyboard);
|
||||
@@ -42,28 +49,27 @@ void loop()
|
||||
{
|
||||
keyboard.scanAsync();
|
||||
rfid.scan();
|
||||
std::vector<user_account> logon_users;
|
||||
if (iface.pinAvailable())
|
||||
{
|
||||
String entered_pin = iface.getPin();
|
||||
std::for_each(userdb.begin(), userdb.end(), [=](user_account user)
|
||||
{
|
||||
if (entered_pin == user.user_pin)
|
||||
{
|
||||
iface.greetUser(user.first_name + " " + user.last_name);
|
||||
}
|
||||
});
|
||||
std::copy_if(userdb.begin(), userdb.end(), std::back_inserter(logon_users), [=](user_account user)
|
||||
{ return entered_pin == user.user_pin; });
|
||||
if (logon_users.size() == 0)
|
||||
iface.showMessage("Login failed!", "-> Pin incorrect",3000);
|
||||
}
|
||||
std::cop
|
||||
else if (rfid.available())
|
||||
{
|
||||
String rfid_card_uid = rfid.getID();
|
||||
std::for_each(userdb.begin(), userdb.end(), [=](user_account user)
|
||||
{
|
||||
if (rfid_card_uid == user.rfid_uid)
|
||||
{
|
||||
iface.greetUser(user.first_name + " " + user.last_name);
|
||||
}
|
||||
});
|
||||
std::copy_if(userdb.begin(), userdb.end(), std::back_inserter(logon_users), [=](user_account user)
|
||||
{ return rfid_card_uid == user.rfid_uid; });
|
||||
if (logon_users.size() == 0)
|
||||
iface.showMessage("Login failed!", "-> Unkown Card",3000);
|
||||
}
|
||||
if (logon_users.size() > 0)
|
||||
{
|
||||
iface.greetUser(logon_users[0].first_name + " " + logon_users[0].last_name);
|
||||
logon_users.clear();
|
||||
}
|
||||
iface.render();
|
||||
}
|
||||
Reference in New Issue
Block a user