Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Wire.h>
- #include <LiquidCrystal_I2C.h>
- #include <Keypad.h>
- #include <SPI.h>
- #include <MFRC522.h>
- #define MAX_CARDS 40
- int cards[MAX_CARDS];
- int cards_count = 0;
- char mode = '0';
- #define NO_OPERATION '0'
- #define CHECK_CARD '1'
- #define ADD_CARD '2'
- #define REMOVE_CARD '3'
- #define BACK 'A'
- // 0 - nie przylozono karty i nie wybrano nic z menu
- // 1 - sprawdz uprawnienia
- // 2 - nadaj uprawnienia
- // 3 - odbierz uprawnienia
- // A - powrot
- #define LED_GREEN 7
- #define LED_RED 8
- LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
- const byte ROWS = 1; // ile wierszy keypad
- const byte COLS = 4; // ile kolumn keypad
- byte rowPins[ROWS] = {6}; // piny wierszy
- byte colPins[COLS] = {5, 4, 3, 2}; // piny kolum
- char keys[ROWS][COLS] = {'1','2','3','A'}; // mapowanie klawiatury
- MFRC522 rfid(10, 9); // piny czytnika
- MFRC522::MIFARE_Key key;
- Keypad klawiatura = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); // inicjalizacja klawiatury
- void setup()
- {
- Serial.begin(9600);
- SPI.begin();
- rfid.PCD_Init();
- pinMode(LED_GREEN, OUTPUT); //dioda zielona
- pinMode(LED_RED, OUTPUT); //dioda czerwona
- lcd.begin(20,4);
- lcd.backlight();
- LCD_print("Zarejestruj", 0, 0);
- LCD_print("karte administratora", 0, 1);
- wczytajAdministratora();
- }
- void loop()
- {
- Serial.println(__func__);
- menu();
- }
- void LCD_print(char* napis, int x, int y) {
- Serial.println(__func__);
- lcd.setCursor(x,y);
- lcd.print(napis);
- }
- void LCD_adminmenu() {
- lcd.begin(20,4);
- lcd.backlight();
- lcd.setCursor(0,0);
- lcd.print("M");
- lcd.setCursor(0,1);
- lcd.print("e");
- lcd.setCursor(0,2);
- lcd.print("n");
- lcd.setCursor(0,3);
- lcd.print("u");
- delay(1000);
- lcd.setCursor(2,0);
- lcd.print("1 - Sprawdz uprawn");
- lcd.setCursor(2,1);
- lcd.print("2 - Nadaj uprawn");
- lcd.setCursor(2,2);
- lcd.print("3 - Odbierz uprn");
- lcd.setCursor(2,3);
- lcd.print("A - Powrot");
- }
- bool isCardExist(int uid) {
- Serial.println(__func__);
- for(int i = 0; i < cards_count; i++) {
- if(cards[i] == uid) {
- return true;
- }
- }
- return false;
- }
- void addCardToList(int uid) {
- Serial.println(__func__);
- if(isCardExist(uid)) {
- kartaJuzIstnieje();
- } else {
- cards[cards_count] = uid;
- cards_count++;
- lcd.clear();
- LCD_print("Dodano nowa karte", 0, 0)
- }
- cards[0] = readCard();
- }
- int readCard() {
- Serial.println(__func__);
- rfid.PICC_IsNewCardPresent();
- rfid.PICC_ReadCardSerial();
- rfid.PICC_HaltA(); // koniec komunikacji z karta
- rfid.PCD_StopCrypto1();
- char uidBytes[] = {rfid.uid.uidByte[0], rfid.uid.uidByte[1], rfid.uid.uidByte[2],rfid.uid.uidByte[3] };
- int uid = *((int*)uidBytes);
- Serial.print("Odczytano kartę UID=");
- Serial.print(uid);
- return uid;
- }
- char getKey() {
- char klawisz = 0;
- bool waitForKey = true;
- while(waitForKey) {
- klawisz = klawiatura.getKey();
- if(klawisz != 0) {
- waitForKey = false;
- }
- return klawisz;
- }
- void wczytajAdministratora() {
- Serial.println(__func__);
- cards[0] = readCard();
- }
- void menu() {
- int uid = readCard();
- if(uid == cards[0]) { // Karta admina
- LCD_adminmenu();
- char key = getKey();
- switch(key) {
- case '1':
- sprawdz();
- break;
- case '2':
- dodajUsera();
- break;
- case '3':
- usunUsera();
- break;
- case 'A':
- wyloguj();
- break;
- default:
- LCD_print("Taki klawisz nie istnieje", 0, 0);
- }
- }
- else if(czyKartaJuzIstnieje(uid)) { // Karta użytkownika
- }
- else { // Karta nie istnieje
- }
- }
- // Dalej nie!
- void gotNewCard() {
- Serial.println(__func__);
- char uidBytes[] = {rfid.uid.uidByte[0], rfid.uid.uidByte[1], rfid.uid.uidByte[2],rfid.uid.uidByte[3] };
- int uid = *((int*)uidBytes);
- // jezeli nie ma mastera to go zarejestruj
- if (cardsCount == 0) {
- cards[0] = uid;
- cardsCount++;
- Serial.println("Karta admmina uid: ");
- Serial.println(uid);
- lcd.begin(20,4);
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print("Zarejestrowano karte");
- delay(2000);
- przylozKarte();
- } else {
- // juz sa jakies karty
- // sprawdz czy to karta admina
- if (uid == cards[0] && mode != CHECK_CARD) {
- // odpal menu admina
- Serial.println("Menu admina");
- menuadmina();
- char klawisz;
- bool waitForKey = true;
- while(waitForKey) {
- klawisz = klawiatura.getKey();
- switch(klawisz) {
- case '1':
- case '2':
- case '3':
- case 'A':
- waitForKey = false;
- break;
- }
- }
- Serial.println("Wybrano tryb:");
- Serial.println(klawisz);
- mode = klawisz;
- przylozKarte();
- } else {
- if(mode == CHECK_CARD) {
- lcd.clear();
- if(uid == cards[0]) {
- lcd.print("Karta administratora");
- } else if(czyKartaJuzIstnieje(uid)) {
- lcd.print("Karta uzytkownika");
- } else {
- lcd.print("Karta nieznana");
- }
- } else if (mode == ADD_CARD) {
- dodajKarte(uid);
- } else if (mode == REMOVE_CARD) {
- usunKarte(uid);
- } else {
- obsluzZamek(uid);
- }
- mode = NO_OPERATION;
- delay(2000);
- przylozKarte();
- }
- }
- }
- void obsluzZamek(int uid) {
- Serial.println(__func__);
- // zamek
- if(czyKartaJuzIstnieje(uid)) {
- digitalWrite(LED_GREEN, true);
- } else {
- digitalWrite(LED_RED, true);
- }
- delay(4000);
- digitalWrite(LED_RED, false);
- digitalWrite(LED_GREEN, false);
- }
- bool czyKartaJuzIstnieje(int uid) {
- Serial.println(__func__);
- for(int i = 0; i < cardsCount; i++) {
- if(cards[i] == uid) {
- return true;
- }
- }
- return false;
- }
- void dodajKarte(int uid) {
- Serial.println(__func__);
- if(czyKartaJuzIstnieje(uid)) {
- kartaJuzIstnieje();
- } else {
- cards[cardsCount] = uid;
- cardsCount++;
- dodanoNowaKarte();
- }
- }
- void usunKarte(int uid) {
- Serial.println(__func__);
- if(!czyKartaJuzIstnieje(uid)) {
- kartaNiezarejestrowana();
- } else if(uid == cards[0]) {
- probaUsunieciaAdministratora();
- Serial.println("dupa");
- } else {
- int cardIdx = 0;
- for(int i = 0; i < cardsCount; i++) {
- if(cards[i] == uid) {
- cardIdx = i;
- break;
- }
- }
- for(int i = cardIdx; i < cardsCount - 1; i++) {
- cards[i] = cards[i+1];
- }
- cardsCount--;
- kartaUsunieta();
- }
- }
- void przylozKarte() {
- lcd.begin(20,4);
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print("Przyloz karte");
- }
- void kartaJuzIstnieje() {
- lcd.begin(20,4);
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print("Karta juz istnieje");
- }
- void dodanoNowaKarte() {
- lcd.begin(20,4);
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print("Dodano nowa karte");
- }
- void kartaNiezarejestrowana() {
- lcd.begin(20,4);
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print("Karta");
- lcd.setCursor(0,1);
- lcd.print("niezarejestrowana");
- }
- void probaUsunieciaAdministratora() {
- lcd.begin(20,4);
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print("Nie mozna usunac administartora");
- }
- void kartaUsunieta() {
- lcd.begin(20,4);
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print("Karta usunieta");
- }
- void menuadmina() {
- lcd.begin(20,4);
- lcd.backlight(); // terminamos con el backlight on
- lcd.setCursor(0,0);
- lcd.print("M");
- lcd.setCursor(0,1);
- lcd.print("e");
- lcd.setCursor(0,2);
- lcd.print("n");
- lcd.setCursor(0,3);
- lcd.print("u");
- delay(1000);
- lcd.setCursor(2,0);
- lcd.print("1 - Sprawdz uprawn");
- lcd.setCursor(2,1);
- lcd.print("2 - Nadaj uprawn");
- lcd.setCursor(2,2);
- lcd.print("3 - Odbierz uprn");
- lcd.setCursor(2,3);
- lcd.print("A - Powrot");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement