Experimentboy

Serrure RFID Arduino - ExperimentBoy

Apr 8th, 2018
27,195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.60 KB | None | 0 0
  1. #include <SPI.h>
  2. #include <RFID.h>
  3. #include <EEPROM.h>
  4.  
  5. #define SS_PIN 10 //SS=SDA, 53 imposé pour Mega, puis SCK 52, MOSI 51, MISO 50
  6.                    // Arduino Uno: RST: 9, SS (SDA): 10, MOSI: 11, MISO: 12, SCK: 13
  7.                    // Arduino Nano: RST: D9, SS (SDA): D10, MOSI: D11, MISO: D12, SCK: D13
  8. #define RST_PIN 9 //le pin qu'on veut pour RST
  9.  
  10. byte led_rouge = 6, led_verte = 7, bouton = 4, serrure = 8, buzz = 2;
  11. byte cur_badge[5]; //current badge, liste des 5 octets du badge que l'on lit
  12.  
  13. RFID rfid(SS_PIN, RST_PIN);
  14.    
  15. void setup()
  16. {
  17.   Serial.begin(9600); //uniquement pour debug, arrête de faire pause pour lire mes conneries
  18.   SPI.begin();
  19.   rfid.init();
  20.   pinMode(led_rouge,OUTPUT);
  21.   pinMode(led_verte,OUTPUT);
  22.   pinMode(bouton, INPUT_PULLUP);
  23.   pinMode(serrure, OUTPUT);
  24.   pinMode(buzz, OUTPUT);
  25.  
  26.   if( !digitalRead(bouton))// à l'appui du bouton au moment du démarrage, effaçage de la mémoire
  27.   {
  28.     for (int n=0; n<1024; n++) //lancer ces deux lignes pour effacer totalement la mémoire
  29.         EEPROM.write(n,0);
  30.  
  31.   digitalWrite(led_rouge,1);
  32.   digitalWrite(led_verte,1);
  33.   tone(buzz,2093,1000);
  34.   delay(1000);
  35.   digitalWrite(led_rouge,0);
  36.   digitalWrite(led_verte,0);
  37.   }
  38.   else //bip normal d'allumage
  39.   {
  40.     digitalWrite(led_verte,1);
  41.     tone(buzz,2093, 150); delay(150);
  42.     digitalWrite(led_verte,0); delay(150);
  43.     tone(buzz, 2093, 150); digitalWrite(led_verte,1); delay(150);
  44.     digitalWrite(led_verte,0);
  45.   }
  46. }
  47.  
  48. void new_badge()
  49. {
  50.   // Enregistre un nouveau badge dans la mémoire EEPROM
  51.   int start_mem = EEPROM.read(0)*5+1; //dans la première case mémoire, on stock le nombre de badge déjà sauvegardés,
  52.                                   //et on calcule la case mémoire à partir de laquelle enregistrer le nouveau badgenb_badge
  53.     for(byte n= 0; n<5; n++)
  54.     {
  55.       EEPROM.write(start_mem+n, cur_badge[n]);
  56.     }
  57.     EEPROM.write(0, EEPROM.read(0)+1);
  58. }
  59.  
  60. bool compare_badge()
  61. {
  62.   //Compare le badge lu avec tous les badges enregistrés
  63.   int nb_badge = EEPROM.read(0); //récupération du nombre de badges stockés en mémoire
  64.   bool badgeOk = false; //0 si badge non correspondant, 1 si badge correspondant
  65.   /*Serial.println("Badge actuel: ");
  66.   Serial.println(cur_badge[0]);
  67.   Serial.println(cur_badge[1]);
  68.   Serial.println(cur_badge[2]);
  69.   Serial.println(cur_badge[3]);
  70.   Serial.println(cur_badge[4]);
  71.   Serial.println("FIN BADGE ACTUEL");*/
  72.   for(int n = 0; n<nb_badge; n++)
  73.   {
  74.   /*Serial.print("Badge memoire lu numero: "); Serial.println(n+1);
  75.   Serial.println(EEPROM.read(n*5+1));
  76.   Serial.println(EEPROM.read(n*5+2));
  77.   Serial.println(EEPROM.read(n*5+3));
  78.   Serial.println(EEPROM.read(n*5+4));
  79.   Serial.println(EEPROM.read(n*5+5));
  80.   Serial.println("FIN BADGE MEMOIRE LU");*/
  81.     badgeOk = EEPROM.read(n*5+1)==cur_badge[0] && EEPROM.read(n*5+2)==cur_badge[1] && EEPROM.read(n*5+3)==cur_badge[2] && EEPROM.read(n*5+4)==cur_badge[3] && EEPROM.read(n*5+5)==cur_badge[4];
  82.     if (badgeOk) return true;
  83.   }
  84.   return false;
  85. }
  86.  
  87.  
  88.  
  89. void loop()
  90. {
  91.     if (rfid.isCard()) {
  92.         if (rfid.readCardSerial())
  93.             {
  94.                 for(byte n=0; n<5; n++)
  95.                 {
  96.                 cur_badge[n] = rfid.serNum[n]; //copie de la liste des 5 octets lus sur le badge dans la liste current badge (cur_badge))
  97.                 }
  98.                 /*Serial.println(rfid.serNum[0],DEC);
  99.                 Serial.println(rfid.serNum[1],DEC);
  100.                 Serial.println(rfid.serNum[2],DEC);
  101.                 Serial.println(rfid.serNum[3],DEC);
  102.                 Serial.println(rfid.serNum[4],DEC);*/
  103.              
  104.          if(compare_badge()) //si la comparaison du badge actuel avec un des badges mémoire est ok, alors on ouvre
  105.          {
  106.           digitalWrite(led_verte,1);
  107.           tone(buzz,523,50);
  108.           delay(50);
  109.           tone(buzz, 783, 50);
  110.           delay(50);
  111.           tone(buzz, 1046, 50);
  112.           delay(50);
  113.           tone(buzz, 1568, 50);
  114.           delay(50);
  115.           tone(buzz, 2093, 70);
  116.           delay(250);
  117.           digitalWrite(serrure, 1);
  118.           delay(3000);
  119.           digitalWrite(led_verte,0);
  120.           digitalWrite(serrure, 0);
  121.          }
  122.          else
  123.          {
  124.           digitalWrite(led_rouge, 1);
  125.           tone(buzz,370,50);
  126.           delay(100);
  127.           tone(buzz, 370, 300);
  128.           delay(1000);
  129.           digitalWrite(led_rouge, 0);
  130.          }
  131.        }
  132.     }
  133.  
  134.          
  135.     if(!digitalRead(bouton)) //lors de l'appui du bouton pour enregistrer un nouveau badge
  136.     {
  137.        while(!digitalRead(bouton)) {} //anti rebond sur le bouton d'enregistrement de nouveau badge
  138.        delay(100);
  139.        
  140.        digitalWrite(led_rouge, 1); digitalWrite(led_verte,1); //allumage des deux leds simultanément pour signaler que c'est OOOKAAAAAYYYYY et prêt
  141.  
  142.        while (!rfid.isCard() && digitalRead(bouton)) {} //on attend la lecture d'un badge, ou le rappui du bouton qui va annuler, car le if suivant ne sera pas vérifié
  143.        
  144.        if (rfid.readCardSerial())
  145.        {
  146.         for(byte n=0; n<5; n++)
  147.             {cur_badge[n] = rfid.serNum[n];} //lecture du badge que l'on passe
  148.         if(!compare_badge()) //si le badge n'est pas déjà enregistré, on enregistre le nouveau badge
  149.             {
  150.               new_badge();
  151.               digitalWrite(led_rouge, 0);
  152.               digitalWrite(led_verte, 1);
  153.               tone(buzz, 2093, 500);
  154.               delay(200);
  155.               digitalWrite(led_verte, 0);
  156.               delay(200);
  157.               digitalWrite(led_verte, 1);
  158.               delay(200);
  159.               digitalWrite(led_verte, 0);
  160.               delay(200);
  161.               digitalWrite(led_verte, 1);
  162.               delay(200);
  163.               digitalWrite(led_verte, 0);
  164.             }
  165.           else //si le badge que l'on veut ajouter est déjà enregistré, du con, ça clignote rouge
  166.           {
  167.               digitalWrite(led_verte, 0);
  168.               digitalWrite(led_rouge, 1);
  169.               tone(buzz,370,500);
  170.               delay(200);
  171.               digitalWrite(led_rouge, 0);
  172.               delay(200);
  173.               digitalWrite(led_rouge, 1);
  174.               delay(200);
  175.               digitalWrite(led_rouge, 0);
  176.               delay(200);
  177.               digitalWrite(led_rouge, 1);
  178.               delay(200);
  179.               digitalWrite(led_rouge, 0);
  180.           }
  181.         }
  182.       else
  183.       {
  184.          //si on rappuie sur le bouton, retour
  185.         digitalWrite(led_rouge,0);
  186.         digitalWrite(led_verte,0);
  187.         while(!digitalRead(bouton)) {} //anti redéclenchement si on reste appuyé
  188.         delay(500);
  189.       }
  190.      }
  191.     rfid.halt();
  192. }
Advertisement
Add Comment
Please, Sign In to add comment