before using User lib
This commit is contained in:
		
							parent
							
								
									06a1750719
								
							
						
					
					
						commit
						a46725cf03
					
				
							
								
								
									
										33
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										33
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							| @ -49,7 +49,38 @@ | |||||||
|         "stdexcept": "cpp", |         "stdexcept": "cpp", | ||||||
|         "streambuf": "cpp", |         "streambuf": "cpp", | ||||||
|         "cinttypes": "cpp", |         "cinttypes": "cpp", | ||||||
|         "typeinfo": "cpp" |         "typeinfo": "cpp", | ||||||
|  |         "any": "cpp", | ||||||
|  |         "bitset": "cpp", | ||||||
|  |         "cfenv": "cpp", | ||||||
|  |         "charconv": "cpp", | ||||||
|  |         "chrono": "cpp", | ||||||
|  |         "codecvt": "cpp", | ||||||
|  |         "complex": "cpp", | ||||||
|  |         "condition_variable": "cpp", | ||||||
|  |         "coroutine": "cpp", | ||||||
|  |         "csetjmp": "cpp", | ||||||
|  |         "csignal": "cpp", | ||||||
|  |         "ctime": "cpp", | ||||||
|  |         "cuchar": "cpp", | ||||||
|  |         "forward_list": "cpp", | ||||||
|  |         "unordered_set": "cpp", | ||||||
|  |         "ratio": "cpp", | ||||||
|  |         "regex": "cpp", | ||||||
|  |         "fstream": "cpp", | ||||||
|  |         "future": "cpp", | ||||||
|  |         "iomanip": "cpp", | ||||||
|  |         "iostream": "cpp", | ||||||
|  |         "mutex": "cpp", | ||||||
|  |         "numbers": "cpp", | ||||||
|  |         "scoped_allocator": "cpp", | ||||||
|  |         "shared_mutex": "cpp", | ||||||
|  |         "span": "cpp", | ||||||
|  |         "stop_token": "cpp", | ||||||
|  |         "thread": "cpp", | ||||||
|  |         "typeindex": "cpp", | ||||||
|  |         "valarray": "cpp", | ||||||
|  |         "variant": "cpp" | ||||||
|     }, |     }, | ||||||
|     "C_Cpp.errorSquiggles": "Disabled" |     "C_Cpp.errorSquiggles": "Disabled" | ||||||
| } | } | ||||||
| @ -16,3 +16,5 @@ lib_deps = | |||||||
| 	xreef/PCF8574 library@^2.2.1 | 	xreef/PCF8574 library@^2.2.1 | ||||||
| 	marcoschwartz/LiquidCrystal_I2C@^1.1.4 | 	marcoschwartz/LiquidCrystal_I2C@^1.1.4 | ||||||
| 	miguelbalboa/MFRC522@^1.4.9 | 	miguelbalboa/MFRC522@^1.4.9 | ||||||
|  | 	me-no-dev/ESP Async WebServer@^1.2.3 | ||||||
|  | 	bblanchon/ArduinoJson@^6.18.5 | ||||||
|  | |||||||
| @ -92,7 +92,7 @@ void Interface::render() | |||||||
|             this->_lcd.clear(); |             this->_lcd.clear(); | ||||||
|             this->_lcd.print("Please enter Pin"); |             this->_lcd.print("Please enter Pin"); | ||||||
|             this->_lcd.setCursor(0, 1); |             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->_lcd.print("Pin: " + _pin_number); | ||||||
|             this->_display_state = 2; |             this->_display_state = 2; | ||||||
|             this->_displayUpdate = false; |             this->_displayUpdate = false; | ||||||
|  | |||||||
							
								
								
									
										24
									
								
								src/Users.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								src/Users.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -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
									
								
								src/Users.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								src/Users.h
									
									
									
									
									
										Normal file
									
								
							| @ -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); | ||||||
|  | }; | ||||||
							
								
								
									
										40
									
								
								src/main.cpp
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								src/main.cpp
									
									
									
									
									
								
							| @ -4,8 +4,9 @@ | |||||||
| #include "Keyboard.h" | #include "Keyboard.h" | ||||||
| #include "Rfid.h" | #include "Rfid.h" | ||||||
| #include "Interface.h" | #include "Interface.h" | ||||||
|  | #include <ESP8266WiFi.h> | ||||||
| #include <vector> | #include <vector> | ||||||
| 
 | #include "Users.h" | ||||||
| // Rfid
 | // Rfid
 | ||||||
| Rfid rfid; | Rfid rfid; | ||||||
| // i2C Bus
 | // i2C Bus
 | ||||||
| @ -14,6 +15,10 @@ Rfid rfid; | |||||||
| 
 | 
 | ||||||
| Keyboard keyboard(200); | Keyboard keyboard(200); | ||||||
| Interface iface; | 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
 | // User DB
 | ||||||
| 
 | 
 | ||||||
| @ -30,7 +35,9 @@ void setup() | |||||||
| { | { | ||||||
| 	Serial.begin(9600); | 	Serial.begin(9600); | ||||||
| 	Serial.print("Starting"); | 	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); | 	keyboard.begin(&Wire); | ||||||
| 	rfid.begin(); | 	rfid.begin(); | ||||||
| 	iface.begin(&keyboard); | 	iface.begin(&keyboard); | ||||||
| @ -42,28 +49,27 @@ void loop() | |||||||
| { | { | ||||||
| 	keyboard.scanAsync(); | 	keyboard.scanAsync(); | ||||||
| 	rfid.scan(); | 	rfid.scan(); | ||||||
|  | 	std::vector<user_account> logon_users; | ||||||
| 	if (iface.pinAvailable()) | 	if (iface.pinAvailable()) | ||||||
| 	{ | 	{ | ||||||
| 		String entered_pin = iface.getPin(); | 		String entered_pin = iface.getPin(); | ||||||
| 		std::for_each(userdb.begin(), userdb.end(), [=](user_account user) | 		std::copy_if(userdb.begin(), userdb.end(), std::back_inserter(logon_users), [=](user_account user) | ||||||
| 					  { | 					 { return entered_pin == user.user_pin; }); | ||||||
| 						  if (entered_pin == user.user_pin) | 		if (logon_users.size() == 0) | ||||||
| 						  { | 			iface.showMessage("Login failed!", "-> Pin incorrect",3000); | ||||||
| 							  iface.greetUser(user.first_name + " " + user.last_name); |  | ||||||
| 						  } |  | ||||||
| 					  }); |  | ||||||
| 	} | 	} | ||||||
| 	std::cop |  | ||||||
| 	else if (rfid.available()) | 	else if (rfid.available()) | ||||||
| 	{ | 	{ | ||||||
| 		String rfid_card_uid = rfid.getID(); | 		String rfid_card_uid = rfid.getID(); | ||||||
| 		std::for_each(userdb.begin(), userdb.end(), [=](user_account user) | 		std::copy_if(userdb.begin(), userdb.end(), std::back_inserter(logon_users), [=](user_account user) | ||||||
| 					  { | 					 { return rfid_card_uid == user.rfid_uid; }); | ||||||
| 						  if (rfid_card_uid == user.rfid_uid) | 		if (logon_users.size() == 0) | ||||||
| 						  { | 			iface.showMessage("Login failed!", "-> Unkown Card",3000); | ||||||
| 							  iface.greetUser(user.first_name + " " + user.last_name); | 	} | ||||||
| 						  } | 	if (logon_users.size() > 0) | ||||||
| 					  }); | 	{ | ||||||
|  | 		iface.greetUser(logon_users[0].first_name + " " + logon_users[0].last_name); | ||||||
|  | 		logon_users.clear(); | ||||||
| 	} | 	} | ||||||
| 	iface.render(); | 	iface.render(); | ||||||
| } | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user