275 lines
7.5 KiB
C++
275 lines
7.5 KiB
C++
/* +---------+
|
|
+----------------------------------->READ TAGS+^------------------------------------------+
|
|
| +--------------------+ |
|
|
| | | |
|
|
| | | |
|
|
| +----v-----+ +-----v----+ |
|
|
| |MASTER TAG| |OTHER TAGS| |
|
|
| +--+-------+ ++-------------+ |
|
|
| | | | |
|
|
| | | | |
|
|
| +-----v---+ +----v----+ +----v------+ |
|
|
| +------------+READ TAGS+---+ |KNOWN TAG| |UNKNOWN TAG| |
|
|
| | +-+-------+ | +-----------+ +------------------+ |
|
|
| | | | | | |
|
|
| +----v-----+ +----v----+ +--v--------+ +-v----------+ +------v----+ |
|
|
| |MASTER TAG| |KNOWN TAG| |UNKNOWN TAG| |GRANT ACCESS| |DENY ACCESS| |
|
|
| +----------+ +---+-----+ +-----+-----+ +-----+------+ +-----+-----+ |
|
|
| | | | | |
|
|
| +----+ +----v------+ +--v---+ | +--------------->
|
|
+-------+EXIT| |DELETE FROM| |ADD TO| | |
|
|
+----+ | EEPROM | |EEPROM| | |
|
|
+-----------+ +------+ +-------------------------------+
|
|
|
|
Typical pin layout used:
|
|
-----------------------------------------------------------------------------------------
|
|
MFRC522 Arduino Arduino Arduino Arduino Arduino
|
|
Reader/PCD Uno/101 Mega Nano v3 Leonardo/Micro Pro Micro
|
|
Signal Pin Pin Pin Pin Pin Pin
|
|
-----------------------------------------------------------------------------------------
|
|
RST/Reset RST 9 5 D9 RESET/ICSP-5 RST
|
|
SPI SS SDA(SS) 10 53 D10 10 10
|
|
SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16
|
|
SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14
|
|
SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15
|
|
*/
|
|
|
|
#include <EEPROM.h> // We are going to read and write PICC's UIDs from/to EEPROM
|
|
#include <SPI.h> // RC522 Module uses SPI protocol
|
|
#include <MFRC522.h> // Library for Mifare RC522 Devices
|
|
#include <avr/wdt.h>
|
|
|
|
#define ledView 13
|
|
|
|
|
|
//Ver 3
|
|
// LED 12V - A1
|
|
//Relay 1 - D5
|
|
//Button 1 - D8
|
|
// Relay 2 - D6
|
|
// Button 2 - D7
|
|
|
|
#ifdef COMMON_ANODE
|
|
#define LED_ON LOW
|
|
#define LED_OFF HIGH
|
|
#else
|
|
#define LED_ON HIGH
|
|
#define LED_OFF LOW
|
|
#endif
|
|
|
|
#define redLed 4 // Set Led Pins
|
|
#define greenLed 2
|
|
#define blueLed 3
|
|
|
|
#define relay 5 //6 // Set Relay 1 Pin
|
|
#define button 7 // button exit
|
|
|
|
#define relay_2 6 //6 // Set Relay 1 Pin
|
|
#define button_2 8 // button exit
|
|
|
|
#define wipeB A0 // Button pin for WipeMode
|
|
|
|
#define Light A1 // Led tro sang camera
|
|
|
|
|
|
int stt;
|
|
int stt_old;
|
|
String input;
|
|
|
|
|
|
int stt_2;
|
|
int stt_old_2;
|
|
String input_2;
|
|
|
|
bool Light_stt = false;
|
|
bool relay_stt = false;
|
|
bool relay_stt_2 = false;
|
|
|
|
bool sttRun = false;
|
|
bool Debug = false;
|
|
|
|
///////////////////////////////////////// Setup ///////////////////////////////////
|
|
void setup()
|
|
{
|
|
//Arduino Pin Configuration
|
|
pinMode(13, OUTPUT);
|
|
pinMode(Light, OUTPUT);
|
|
digitalWrite(13, LOW);
|
|
|
|
pinMode(ledView, OUTPUT);
|
|
pinMode(wipeB, INPUT_PULLUP); // Enable pin's pull up resistor
|
|
pinMode(relay, OUTPUT);
|
|
pinMode(relay_2, OUTPUT);
|
|
pinMode(button,INPUT);
|
|
pinMode(button_2,INPUT);
|
|
|
|
digitalWrite(relay, HIGH); // Make sure door is locked
|
|
digitalWrite(relay_2, HIGH); // Make sure door is locked
|
|
digitalWrite(Light, LOW);
|
|
//Protocol Configuration
|
|
Serial.begin(9600); // Initialize serial communications with PC
|
|
}
|
|
|
|
///////////////////////////////////////// Main Loop ///////////////////////////////////
|
|
void loop()
|
|
{
|
|
ReadButton();
|
|
SerialRead();
|
|
CheckButton();
|
|
}
|
|
|
|
///////////////////////////////////////// Access Granted ///////////////////////////////////
|
|
// Turn on Light camera
|
|
void TurnOn_Light() {
|
|
digitalWrite(Light, HIGH);
|
|
Light_stt = true;
|
|
}
|
|
void TurnOff_Light() {
|
|
digitalWrite(Light, LOW);
|
|
Light_stt = false;
|
|
}
|
|
|
|
void granted(uint16_t setDelay)
|
|
{
|
|
|
|
digitalWrite(relay, LOW); // Unlock door!
|
|
digitalWrite(ledView, LOW);
|
|
delay(setDelay); // Hold door lock open for given seconds
|
|
digitalWrite(relay, HIGH); // Relock door
|
|
digitalWrite(ledView, HIGH);
|
|
delay(200); // Hold green LED on for a second
|
|
}
|
|
|
|
void granted_2(uint16_t setDelay)
|
|
{
|
|
|
|
digitalWrite(relay_2, LOW); // Unlock door!
|
|
digitalWrite(ledView, LOW);
|
|
delay(setDelay); // Hold door lock open for given seconds
|
|
digitalWrite(relay_2, HIGH); // Relock door
|
|
digitalWrite(ledView, HIGH);
|
|
delay(200); // Hold green LED on for a second
|
|
}
|
|
|
|
// ADD Code
|
|
|
|
void ReadButton()
|
|
{
|
|
stt = digitalRead(button);
|
|
stt_2 = digitalRead(button_2);
|
|
|
|
if (stt == 0 && stt_old == 1)
|
|
{
|
|
relay_stt = true;
|
|
//Serial.println("Button 1 press");
|
|
}
|
|
else
|
|
{
|
|
relay_stt = false;
|
|
}
|
|
if (stt_2 == 0 && stt_old_2 == 1)
|
|
{
|
|
//Serial.println("Button 2 press");
|
|
relay_stt_2 = true;
|
|
}
|
|
else
|
|
{
|
|
relay_stt_2 = false;
|
|
}
|
|
|
|
stt_old = stt;
|
|
stt_old_2 = stt_2;
|
|
}
|
|
|
|
|
|
|
|
// SD MASTER: 2B429622
|
|
// SD TEST: C9B09B6E
|
|
|
|
void SerialRead()
|
|
{
|
|
while (Serial.available() > 0)
|
|
{
|
|
input = Serial.readStringUntil('\r');
|
|
//Serial.println(input);
|
|
input.trim();
|
|
if (input == "3") {
|
|
if (Light_stt == false) {
|
|
TurnOn_Light();
|
|
}
|
|
Serial.println("open_3");
|
|
ClearSerialdata();
|
|
|
|
} else if (input == "4") {
|
|
|
|
if (Light_stt == true) {
|
|
TurnOff_Light();
|
|
|
|
}
|
|
Serial.println("open_4");
|
|
ClearSerialdata();
|
|
}
|
|
else if (input == "1")
|
|
{
|
|
|
|
if (relay_stt == false)
|
|
{
|
|
relay_stt = true;
|
|
digitalWrite(13, HIGH);
|
|
}
|
|
Serial.println("open_1");
|
|
ClearSerialdata();
|
|
}else if (input == "2")
|
|
{
|
|
|
|
if (relay_stt_2 == false)
|
|
{
|
|
relay_stt_2 = true;
|
|
digitalWrite(13, HIGH);
|
|
}
|
|
Serial.println("open_2");
|
|
ClearSerialdata();
|
|
}
|
|
else
|
|
{
|
|
digitalWrite(13, LOW);
|
|
}
|
|
}
|
|
ClearSerialdata();
|
|
}
|
|
void ClearSerialdata()
|
|
{
|
|
while (Serial.available() > 0)
|
|
{
|
|
char c = Serial.read();
|
|
}
|
|
}
|
|
void CheckButton()
|
|
{
|
|
if (relay_stt == true)
|
|
{
|
|
granted(4000); // Open the door lock for 300 ms
|
|
relay_stt = false;
|
|
ClearSerialdata();
|
|
}
|
|
else
|
|
{
|
|
digitalWrite(relay, HIGH); // Unlock door!
|
|
digitalWrite(ledView, HIGH);
|
|
relay_stt = false;
|
|
}
|
|
//-------------------------
|
|
if (relay_stt_2 == true)
|
|
{
|
|
granted_2(4000); // Open the door lock for 300 ms
|
|
relay_stt_2 = false;
|
|
ClearSerialdata();
|
|
}
|
|
else
|
|
{
|
|
digitalWrite(relay_2, HIGH); // Unlock door!
|
|
digitalWrite(ledView, HIGH);
|
|
relay_stt_2 = false;
|
|
}
|
|
}
|