Advertisement
Guest User

Untitled

a guest
Nov 16th, 2019
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 8.15 KB | None | 0 0
  1. #include <Wire.h>
  2. #include <LiquidCrystal_I2C.h>
  3. #include <Keypad.h>
  4. #include <SPI.h>
  5. #include <MFRC522.h>
  6.  
  7. #define MAX_CARDS 40
  8.  
  9. int cards[MAX_CARDS];
  10. int cards_count = 0;
  11.  
  12. char mode = '0';
  13.  
  14. #define NO_OPERATION '0'
  15. #define CHECK_CARD '1'
  16. #define ADD_CARD '2'
  17. #define REMOVE_CARD '3'
  18. #define BACK 'A'
  19. // 0 - nie przylozono karty i nie wybrano nic z menu
  20. // 1 - sprawdz uprawnienia
  21. // 2 - nadaj uprawnienia
  22. // 3 - odbierz uprawnienia
  23. // A - powrot
  24.  
  25. #define LED_GREEN 7
  26. #define LED_RED 8
  27.  
  28. LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
  29.  
  30. const byte ROWS = 1; // ile wierszy keypad
  31. const byte COLS = 4; // ile kolumn keypad
  32. byte rowPins[ROWS] = {6}; // piny wierszy
  33. byte colPins[COLS] = {5, 4, 3, 2}; // piny kolum
  34. char keys[ROWS][COLS] = {'1','2','3','A'}; // mapowanie klawiatury
  35.  
  36. MFRC522 rfid(10, 9); // piny czytnika
  37. MFRC522::MIFARE_Key key;
  38. Keypad klawiatura = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); // inicjalizacja klawiatury
  39.  
  40. void setup()  
  41. {
  42.     Serial.begin(9600);
  43.     SPI.begin();
  44.     rfid.PCD_Init();
  45.     pinMode(LED_GREEN, OUTPUT); //dioda zielona
  46.     pinMode(LED_RED, OUTPUT); //dioda czerwona
  47.  
  48.     lcd.begin(20,4);
  49.     lcd.backlight();  
  50.     LCD_print("Zarejestruj", 0, 0);
  51.     LCD_print("karte administratora", 0, 1);
  52.     wczytajAdministratora();
  53. }
  54. void loop()  
  55. {
  56.     Serial.println(__func__);
  57.     menu();
  58. }
  59.  
  60. void LCD_print(char* napis, int x, int y) {
  61.     Serial.println(__func__);
  62.     lcd.setCursor(x,y);
  63.     lcd.print(napis);
  64. }
  65.  
  66. void LCD_adminmenu() {
  67.     lcd.begin(20,4);
  68.     lcd.backlight();
  69.     lcd.setCursor(0,0);
  70.     lcd.print("M");
  71.     lcd.setCursor(0,1);
  72.     lcd.print("e");
  73.     lcd.setCursor(0,2);
  74.     lcd.print("n");
  75.     lcd.setCursor(0,3);
  76.     lcd.print("u");
  77.     delay(1000);
  78.     lcd.setCursor(2,0);
  79.     lcd.print("1 - Sprawdz uprawn");
  80.     lcd.setCursor(2,1);
  81.     lcd.print("2 - Nadaj uprawn");
  82.     lcd.setCursor(2,2);
  83.     lcd.print("3 - Odbierz uprn");
  84.     lcd.setCursor(2,3);
  85.     lcd.print("A - Powrot");
  86. }
  87.  
  88. bool isCardExist(int uid) {
  89.     Serial.println(__func__);
  90.     for(int i = 0; i < cards_count; i++) {
  91.         if(cards[i] == uid) {
  92.             return true;
  93.         }
  94.     }
  95.     return false;
  96. }
  97.  
  98. void addCardToList(int uid) {
  99.     Serial.println(__func__);
  100.     if(isCardExist(uid)) {
  101.         kartaJuzIstnieje();
  102.     } else {
  103.         cards[cards_count] = uid;
  104.         cards_count++;
  105.         lcd.clear();
  106.         LCD_print("Dodano nowa karte", 0, 0)
  107.     }
  108.     cards[0] = readCard();
  109. }
  110.  
  111. int readCard() {
  112.     Serial.println(__func__);
  113.     rfid.PICC_IsNewCardPresent();
  114.     rfid.PICC_ReadCardSerial();
  115.     rfid.PICC_HaltA();  // koniec komunikacji z karta
  116.     rfid.PCD_StopCrypto1();
  117.     char uidBytes[] = {rfid.uid.uidByte[0], rfid.uid.uidByte[1], rfid.uid.uidByte[2],rfid.uid.uidByte[3] };
  118.     int uid = *((int*)uidBytes);
  119.     Serial.print("Odczytano kartę UID=");
  120.     Serial.print(uid);
  121.     return uid;
  122. }
  123.  
  124. char getKey() {
  125.     char klawisz = 0;
  126.     bool waitForKey = true;
  127.     while(waitForKey) {
  128.         klawisz = klawiatura.getKey();
  129.         if(klawisz != 0) {
  130.             waitForKey = false;
  131.         }
  132.     return klawisz;
  133. }
  134.  
  135. void wczytajAdministratora() {
  136.     Serial.println(__func__);
  137.     cards[0] = readCard();
  138. }
  139.  
  140. void menu() {
  141.     int uid = readCard();
  142.     if(uid == cards[0]) { // Karta admina
  143.         LCD_adminmenu();
  144.         char key = getKey();
  145.         switch(key) {
  146.             case '1':
  147.                 sprawdz();
  148.                 break;
  149.             case '2':
  150.                 dodajUsera();
  151.                 break;
  152.             case '3':
  153.                 usunUsera();
  154.                 break;
  155.             case 'A':
  156.                 wyloguj();
  157.                 break;
  158.             default:
  159.                 LCD_print("Taki klawisz nie istnieje", 0, 0);
  160.         }
  161.     }
  162.     else if(czyKartaJuzIstnieje(uid)) { // Karta użytkownika
  163.  
  164.     }
  165.     else { // Karta nie istnieje
  166.  
  167.     }
  168. }
  169.  
  170.  
  171.  
  172.  
  173.  
  174. // Dalej nie!
  175.  
  176. void gotNewCard() {
  177.   Serial.println(__func__);
  178.   char uidBytes[] = {rfid.uid.uidByte[0], rfid.uid.uidByte[1], rfid.uid.uidByte[2],rfid.uid.uidByte[3] };
  179.  
  180.   int uid = *((int*)uidBytes);
  181.  
  182.   // jezeli nie ma mastera to go zarejestruj
  183.   if (cardsCount == 0) {
  184.      cards[0] = uid;
  185.      cardsCount++;
  186.      Serial.println("Karta admmina uid: ");
  187.      Serial.println(uid);
  188.  
  189.      lcd.begin(20,4);
  190.      lcd.clear();
  191.      lcd.setCursor(0,0);
  192.      lcd.print("Zarejestrowano karte");
  193.      delay(2000);
  194.      przylozKarte();
  195.      
  196.   } else {
  197.     // juz sa jakies karty
  198.     // sprawdz czy to karta admina
  199.     if (uid == cards[0] && mode != CHECK_CARD) {
  200.       // odpal menu admina
  201.       Serial.println("Menu admina");
  202.       menuadmina();
  203.  
  204.       char klawisz;
  205.       bool waitForKey = true;
  206.       while(waitForKey) {
  207.         klawisz = klawiatura.getKey();
  208.  
  209.         switch(klawisz) {
  210.           case '1':
  211.           case '2':
  212.           case '3':
  213.           case 'A':
  214.             waitForKey = false;
  215.             break;
  216.         }
  217.       }
  218.      
  219.       Serial.println("Wybrano tryb:");
  220.       Serial.println(klawisz);
  221.  
  222.       mode = klawisz;
  223.       przylozKarte();
  224.     } else {
  225.       if(mode == CHECK_CARD) {
  226.         lcd.clear();
  227.         if(uid == cards[0]) {
  228.           lcd.print("Karta administratora");
  229.         } else if(czyKartaJuzIstnieje(uid)) {
  230.           lcd.print("Karta uzytkownika");
  231.         } else {
  232.           lcd.print("Karta nieznana");
  233.         }
  234.       } else if (mode == ADD_CARD) {
  235.         dodajKarte(uid);
  236.       } else if (mode == REMOVE_CARD) {
  237.         usunKarte(uid);
  238.       } else {
  239.         obsluzZamek(uid);
  240.       }
  241.       mode = NO_OPERATION;
  242.       delay(2000);
  243.       przylozKarte();
  244.     }
  245.   }
  246.  
  247. }
  248.  
  249. void obsluzZamek(int uid) {
  250.   Serial.println(__func__);
  251.   // zamek
  252.   if(czyKartaJuzIstnieje(uid)) {
  253.     digitalWrite(LED_GREEN, true);
  254.   } else {
  255.     digitalWrite(LED_RED, true);
  256.   }
  257.  
  258.   delay(4000);
  259.   digitalWrite(LED_RED, false);
  260.   digitalWrite(LED_GREEN, false);
  261. }
  262.  
  263. bool czyKartaJuzIstnieje(int uid) {
  264.   Serial.println(__func__);
  265.   for(int i = 0; i < cardsCount; i++) {
  266.     if(cards[i] == uid) {
  267.       return true;
  268.     }
  269.   }
  270.  
  271.   return false;
  272. }
  273.  
  274. void dodajKarte(int uid) {
  275.   Serial.println(__func__);
  276.   if(czyKartaJuzIstnieje(uid)) {
  277.     kartaJuzIstnieje();
  278.   } else {
  279.     cards[cardsCount] = uid;
  280.     cardsCount++;
  281.     dodanoNowaKarte();
  282.   }
  283. }
  284.  
  285. void usunKarte(int uid) {
  286.   Serial.println(__func__);
  287.   if(!czyKartaJuzIstnieje(uid)) {
  288.     kartaNiezarejestrowana();
  289.   } else if(uid == cards[0]) {
  290.     probaUsunieciaAdministratora();
  291.     Serial.println("dupa");
  292.   } else {
  293.     int cardIdx = 0;
  294.     for(int i = 0; i < cardsCount; i++) {
  295.       if(cards[i] == uid) {
  296.         cardIdx = i;
  297.         break;
  298.       }
  299.     }
  300.  
  301.     for(int i = cardIdx; i < cardsCount - 1; i++) {
  302.       cards[i] = cards[i+1];
  303.     }
  304.  
  305.     cardsCount--;
  306.     kartaUsunieta();
  307.   }
  308. }
  309.  
  310. void przylozKarte() {
  311.   lcd.begin(20,4);
  312.   lcd.clear();
  313.   lcd.setCursor(0,0);
  314.   lcd.print("Przyloz karte");
  315. }
  316.  
  317. void kartaJuzIstnieje() {
  318.   lcd.begin(20,4);
  319.   lcd.clear();
  320.   lcd.setCursor(0,0);
  321.   lcd.print("Karta juz istnieje");
  322. }
  323.  
  324. void dodanoNowaKarte() {
  325.   lcd.begin(20,4);
  326.   lcd.clear();
  327.   lcd.setCursor(0,0);
  328.   lcd.print("Dodano nowa karte");
  329. }
  330.  
  331. void kartaNiezarejestrowana() {
  332.   lcd.begin(20,4);
  333.   lcd.clear();
  334.   lcd.setCursor(0,0);
  335.   lcd.print("Karta");
  336.   lcd.setCursor(0,1);
  337.   lcd.print("niezarejestrowana");
  338. }
  339.  
  340. void probaUsunieciaAdministratora() {
  341.   lcd.begin(20,4);
  342.   lcd.clear();
  343.   lcd.setCursor(0,0);
  344.   lcd.print("Nie mozna usunac administartora");
  345. }
  346.  
  347. void kartaUsunieta() {
  348.   lcd.begin(20,4);
  349.   lcd.clear();
  350.   lcd.setCursor(0,0);
  351.   lcd.print("Karta usunieta");
  352. }
  353.  
  354.  
  355. void menuadmina() {
  356.   lcd.begin(20,4);
  357.   lcd.backlight(); // terminamos con el backlight on  
  358.   lcd.setCursor(0,0);
  359.   lcd.print("M");
  360.   lcd.setCursor(0,1);
  361.   lcd.print("e");
  362.   lcd.setCursor(0,2);
  363.   lcd.print("n");
  364.   lcd.setCursor(0,3);
  365.   lcd.print("u");
  366.   delay(1000);
  367.   lcd.setCursor(2,0);
  368.   lcd.print("1 - Sprawdz uprawn");
  369.   lcd.setCursor(2,1);
  370.   lcd.print("2 - Nadaj uprawn");
  371.   lcd.setCursor(2,2);
  372.   lcd.print("3 - Odbierz uprn");
  373.   lcd.setCursor(2,3);
  374.   lcd.print("A - Powrot");
  375. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement