//-----------------------------------------------------------------------------------//
// Nom du projet        : Lecteur_Badge_RFID
// Nom du fichier 	: Lecteur-RFID.ino --> (pour bootloader ARDUINO)
// Date de création 	: 22.05.2013
// Date de modification : 29.05.2013
// Version              : 01 
// 
// Auteur 		: Philippe Bovey 
//
// Description 		: Essai avec une carte parallax RFID (  
//
// Remarques		: 
// pages internet       : http://www.parallax.com/tabid/768/productid/114/default.aspx
//                      : 
// Code Source -->      : http://playground.arduino.cc/Learning/PRFID	
//----------------------------------------------------------------------------------//

//--- décalaration de variables globales ---// 
char tb_code_RFID[10]; 

int _enable     = 2;      // correspond a la PIN2 sur la carte ARDUINO UNO 
int index_tb    = 0;      // 
int val_lec_byte;

//--- déclaration de constantes 
const int Byte_Start    = 10;     // byte de Start pour la lecture d'un Tag RFID --> 0x0A 
const int Byte_Stop     = 13;     // byte de Stop pour la lecture d'un Tag RFID --> 0x0D
const int Time_attente  = 5000;   // valeur en ms --> 5s 

//--- boucle de paramétrage ---// 
void setup()
{
  //--- configuration de la liaison série ---//  
  Serial.begin(2400);
  
  //--- configuration entrée-sortie ---//
  pinMode(_enable, OUTPUT);                  // sortie 
  digitalWrite(_enable, LOW);                

  Serial.println("--- Fixme.ch - HackerSpace Lausanne ---");
  Serial.println("--- Version 1 ---");
  Serial.println("--- Code ARDUINO pour Lecteur pour carte RFID - PARALLAX liaison serie ---");  
}


//--- boucle infinie ---// 
void loop() 
{
  //--- test si donnée dans le buffer) ---// 
  if(Serial.available() > 0)
  {
    //--- test si présence du byte de start --> B_S = 10 = 0x0A ---// 
    if((val_lec_byte = Serial.read()) == Byte_Start)
    {
      //--- message de suivit ---//
      Serial.print("\n--> Debut Trame detectee !");
      
      //--- test à nouveau le buffeur si celui-ci contient toujours des données ---// 
      if(Serial.available() > 0)
      {
        index_tb = 0;                // index tu tableau mis a zéro 
        
        //--- message de suivit ---//
        Serial.print("--> LECTURE de la trame !");
        
        while(index_tb < 10)
        {
          //--- si le byte lue n'a pas une valeur de START(10 = 0x0A) ou celle d'un byte de STOP(13 = 0x0D) --> enregistrement des datas 
          if((val_lec_byte != Byte_Start) || (val_lec_byte != Byte_Stop))
          { 
            val_lec_byte = Serial.read();
            tb_code_RFID[index_tb] = val_lec_byte;
            index_tb++;  
          }  
        }
        
        //--- lecteur dans le moniteur série ---// 
        if(index_tb == 10)
        {
          Serial.print("\n VALEUR de la CLE(BADGE/CARTE) testee : ");
          Serial.println(tb_code_RFID); 
        }
        
        //--- désactiver le lecteur pendant 3s ---//
        Serial.print("--- desactiver le lecteur pendant une duree de : ");
        Serial.println(Time_attente); 
        digitalWrite(_enable, HIGH);
        delay(Time_attente);  
        digitalWrite(_enable, LOW); 
      }
      else
        //--- message de suivit ---//
        Serial.println("--> pas de donnee dispo !!!");  
    }
  }
  else
    //--- message de suivit ---//
    Serial.println("\n le Buffeur de donnée est vide");
}
