Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. #include <SoftwareSerial.h>
  2.  
  3. // kde bude připojeno relé k otevření dveří
  4. #define ElRele 9 // na pin 9
  5. // vytvoříme nový seriový port s názvem RFID
  6. SoftwareSerial RFID(2, 3); // RX and TX
  7.  
  8. // zde se bude ukládat data z přiloženého čipu
  9. String idTest = "";
  10. // zde budou uloženy povolené čipy
  11. // můžete libovolně rozšířit
  12. String idOK[5] = {"00006588BF",
  13.                   "0000XXXXXX",
  14.                   "0000000002",
  15.                   "0000000003",
  16.                   "0000664966"};
  17.  
  18. // do tohoto pole si budeme ukládat přijatá data
  19. int data[14];
  20.  
  21. // budeme ukládat čas poslední kontroly čipu
  22. long lastTagReading = 0;
  23.  
  24. void setup()
  25. {
  26.   // nastaví pin 9 ElRele jako výstup
  27.   pinMode(ElRele, OUTPUT);
  28.   // nastaví ElRele na HIGH, protože spíná v LOW
  29.   digitalWrite(ElRele, HIGH);
  30.   // Nastartujeme seriový port RDIF s rychlostí 9600
  31.   RFID.begin(9600);    
  32. }
  33.  
  34. void loop()
  35. {
  36.   delay(200);
  37.   // když sou nějaká data z RDIF prijata
  38.   if (RFID.available() > 0)
  39.   {
  40.     // pro každých 14 částí dat
  41.     for (int i = 0; i<14;i++)
  42.     {
  43.     // přečti data a ulož do pole data
  44.     data[i] = RFID.read();
  45.     }
  46.    
  47.     // vybereme si z pole pouze 2 - 11 část
  48.     // dat, kde je uloženo číslo tagu
  49.     for (int i = 1; i<11; i++)
  50.     {
  51.       // protože jsou data odesílána v ASCI
  52.       // převedeme je na čísla
  53.       char d = data[i];
  54.       // a každý znak připojíme do proměnné idTest
  55.       idTest = idTest + d;
  56.     }
  57.    
  58.    
  59.    // pomocí funkce Kontrola() - deklarovaná dole
  60.    // porovnáme zda je čip mezi povolenými
  61.    // ale jen v případě, že poslední snímání bylo
  62.    // maximálně před 4 sekundami
  63.    
  64.   if (((lastTagReading + 4000) < millis()))
  65.    {
  66.      // ulož čas posledního snímání čipu
  67.      lastTagReading = millis();
  68.      if (Kontrola() ==1)
  69.        // když ano vykonej funkci DobreID()
  70.        DobreID();
  71.     // když ne tak funkci SpatneID
  72.     else SpatneID();  
  73.    }
  74.    
  75.   }
  76.  
  77.   // a nakonec vymaž id testovaného čipu
  78.     idTest = "";
  79.  
  80.  
  81.  
  82. }
  83.  
  84. //////////////////////////////////////////////
  85. // funkce porovnává testovaný čip s uloženými
  86. // když ho najde vrátí číslo 1, když ne tak 0
  87. int Kontrola() {
  88.   int i;
  89.  
  90.   for (i = 0; i < sizeof(idOK); ++i) {
  91.         if (idOK[i] == idTest)
  92.     {
  93.       return 1;
  94.     }
  95.   }
  96.   return 0;
  97. }
  98.  
  99.  
  100.  
  101. void DobreID()
  102. {
  103.   // sepne relé pro elektrozámek
  104.   digitalWrite(ElRele, LOW);
  105.   // zahraje tón
  106.   tone(8, 2200, 600);
  107.   // počká 2,5 sekundy a vypne relé
  108.   delay(2500);
  109.   digitalWrite(ElRele, HIGH);  
  110. }
  111.  
  112. void SpatneID()
  113. {
  114. // zahraje 3 tóny pro nepovolení přístupu
  115. tone(8, 1200, 150);
  116. delay(300);
  117. tone(8, 1200, 150);
  118. delay(300);
  119. tone(8, 1200, 150);
  120. }