(Aide)Ouvrir ou fermer avec RFID

Bonjour,
Je souhaite avec mon arduino faire clignoter une led ou ouvrir un relais quand je passe mon badge la première fois sur mon rfid et quand après je repasse mon badge 3s ou plus dessus que mon relais se ferme et ma led s’éteigne, je n'arrive pas a comprendre pourquoi sa ne marche pas.... mon script allume bien la led quand je passe une première fois, elle s’éteint quand je l'aisse le badge plus de 3s mais quand je repasse mon badge pour la re-allumer elle se ré-éteint des que je le retire..... si vous pouviez regarder voir ou est mon erreur, (ne faite pas attention au commentaire j'ai tellement changer mon code que....) Merci d'avance !!!! :slight_smile:

//definir les librairie
#include <SPI.h>
#include <RFID.h>
//code system
RFID monModuleRFID(10,5);

//definir les variable
int UID[5]={};
int MASTERKEY[5]={131,9,104,0,226};
const char led_rouge = 8;
const char led_vert = 7;
const char relais_1 = 2;
const char relais_2 = 3;
const char bouton_de_demarage = 4;
const char courant_bouton = 9;
boolean contact_activer = false;
boolean demarage_activer = false;
int temps_defini = 2000;   //définition du temps de maintien désiré en ms
long debut_de_detection;//variable qui retien le temps de detection
boolean variable_de_debut_de_detection = false; //variable qui sert a la detection du badge
int etat_de_la_detection;//variable pour suivre l'etat de la detection
boolean dernier_detect_cart_3s = false;//variable pour suivre la dernierre detection de plus de 3s
boolean detect_cart_3s = false;//variable pour suivre la detection de plus de 3s

//code de demarage fix
void setup(){
  Serial.begin(9600);
  //code system
  SPI.begin();
  monModuleRFID.init(); 
  //Definir les sorties 
  pinMode(led_rouge, OUTPUT);
  pinMode(led_vert, OUTPUT);
  pinMode(relais_1,OUTPUT);
  pinMode(relais_2,OUTPUT);
 // pinMode(bouton_de_demarage,INPUT);
  pinMode(courant_bouton,OUTPUT);
  //Definir ce qui est etein/allumer au demarage
  digitalWrite(courant_bouton, HIGH);

}

//code de demarage en boucle
void loop() {
// int lecture_bouton_de_demarage = digitalRead(bouton_de_demarage);//fonction de lecture du bouton
  //if(lecture_bouton_de_demarage == LOW)
  detection_RFID();//verification du rfid
  if(contact_activer == true) {
    digitalWrite(led_vert, HIGH);digitalWrite(led_rouge, LOW);
    digitalWrite(relais_1,HIGH);
    procedure_de_coupure_de_contact();
    }
    else {
      digitalWrite(led_rouge, HIGH);digitalWrite(led_vert, LOW);
      digitalWrite(relais_1,LOW);
      }
}

//code de verification du rfid
void detection_RFID(){
  if (monModuleRFID.isCard()) {  
          if (monModuleRFID.readCardSerial()) {       
            for(int i=0;i<=4;i++)
            {
              UID[i]=monModuleRFID.serNum[i];
            }
          }
          
          if (UID[0] == MASTERKEY[0]
           && UID[1] == MASTERKEY[1]
           && UID[2] == MASTERKEY[2]
           && UID[3] == MASTERKEY[3]
           && UID[4] == MASTERKEY[4])
          {
             contact_activer = true;
            detect_cart_3s = true;//si il detecte un code (renvoi au void)
          }
          else
          {
            //si il ne le detecte pas (renvoi au void)
          }          
          monModuleRFID.halt();
    }
    else {
      detect_cart_3s = false;
      }
  }
  
  void procedure_de_coupure_de_contact(){
    if (detect_cart_3s == true && dernier_detect_cart_3s == false){      //détection de l'appui sur le bouton 1
         debut_de_detection = millis();            //initialisation du compteur 1
         variable_de_debut_de_detection = true;                                          //enregistrement du changement d'état du bouton 1
      }
      if (variable_de_debut_de_detection == true && detect_cart_3s == true && dernier_detect_cart_3s == true){    //le bouton 1 était et est toujours appuyé
                                                                                 
         if ((millis() - debut_de_detection) >= temps_defini){             //est-ce que le temps choisi est écoulé ?                                 
           contact_activer = false;            //déclaration d'allumage de la led 1
            Serial.print("-detecter-");
            delay(50);
         }             
      }
      dernier_detect_cart_3s = detect_cart_3s;
                             //allumage physique de la led

   }

Salut,

Ton code me faisait trop mal à la tête ... En version normalement fonctionnelle et sans mal de crâne xD :

#include <SPI.h>
#include <RFID.h>

RFID monModuleRFID(10,5);

int UID[5]={};
int MASTERKEY[5]={131,9,104,0,226};

const char led_rouge = 8;
const char led_vert = 7;
const char relais_1 = 2;
const char relais_2 = 3;
const char bouton_de_demarage = 4;
const char courant_bouton = 9;

unsigned long temps_defini = 2000;   

void setup(){

  Serial.begin(9600);

  SPI.begin();
  monModuleRFID.init(); 

  pinMode(led_rouge, OUTPUT);
  pinMode(led_vert, OUTPUT);
  pinMode(relais_1,OUTPUT);
  pinMode(relais_2,OUTPUT);
  pinMode(courant_bouton,OUTPUT);
  digitalWrite(courant_bouton, HIGH);

}


void loop() {

  if(detection_RFID() == true) {
  
    digitalWrite(led_vert, HIGH);digitalWrite(led_rouge, LOW);
    digitalWrite(relais_1,HIGH);
    
	unsigned long start=millis();
	
	while(detection_RFID()) {
	
	if(millis()>=(start+temps_defini)) {

	    Serial.print("-detecter-");
            delay(50);
	    digitalWrite(led_rouge, LOW);
	    while(detection_RFID()); 
	    break;

	}
	
	}
	
    } else {

      digitalWrite(led_rouge, HIGH);digitalWrite(led_vert, LOW);
      digitalWrite(relais_1,LOW);

      }
}


void detection_RFID(){

  if (monModuleRFID.isCard()) {  

          if (monModuleRFID.readCardSerial()) {   
    
            for(int i=0;i<=4;i++)
            {
              UID[i]=monModuleRFID.serNum[i];
            }
          }
          
          if (UID[0] == MASTERKEY[0]
           && UID[1] == MASTERKEY[1]
           && UID[2] == MASTERKEY[2]
           && UID[3] == MASTERKEY[3]
           && UID[4] == MASTERKEY[4])
          {

             return true;
            
          } else return false      
		  
          monModuleRFID.halt();

    } else return false;
      
  }

Merci pour ton aide, mon code été devenu n'importe quoi :s
Quand je mes ton code est que je veux Téléverser il y a un message d'erreur que je ne comprend pas :

Arduino : 1.5.7 (Windows 7), Carte : "Arduino Uno"

In file included from C:\Users\Benji861905\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:24:0,
                 from C:\Users\Benji861905\Arduino\hardware\arduino\avr\libraries\SPI/SPI.h:15,
                 from sketch_may28a.ino:1:
sketch_may28a.ino: In function 'void loop()':
sketch_may28a.ino:40:26: error: invalid operands of types 'void' and 'bool' to binary 'operator=='
sketch_may28a.ino:47:23: error: could not convert 'detection_RFID()' from 'void' to 'bool'
sketch_may28a.ino:54:27: error: could not convert 'detection_RFID()' from 'void' to 'bool'
In file included from C:\Users\Benji861905\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:24:0,
                 from C:\Users\Benji861905\Arduino\hardware\arduino\avr\libraries\SPI/SPI.h:15,
                 from sketch_may28a.ino:1:
sketch_may28a.ino: In function 'void detection_RFID()':
sketch_may28a.ino:89:21: error: return-statement with a value, in function returning 'void' [-fpermissive]
sketch_may28a.ino:91:25: error: return-statement with a value, in function returning 'void' [-fpermissive]
sketch_may28a.ino:93:11: error: expected ';' before 'monModuleRFID'
In file included from C:\Users\Benji861905\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:24:0,
                 from C:\Users\Benji861905\Arduino\hardware\arduino\avr\libraries\SPI/SPI.h:15,
                 from sketch_may28a.ino:1:
sketch_may28a.ino:95:19: error: return-statement with a value, in function returning 'void' [-fpermissive]
In file included from C:\Users\Benji861905\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:24:0,
                 from C:\Users\Benji861905\Arduino\hardware\arduino\avr\libraries\SPI/SPI.h:15,
                 from sketch_may28a.ino:1:
sketch_may28a.ino: In function 'void loop()':
sketch_may28a.ino:40:26: error: invalid operands of types 'void' and 'bool' to binary 'operator=='
sketch_may28a.ino:47:23: error: could not convert 'detection_RFID()' from 'void' to 'bool'
sketch_may28a.ino:54:27: error: could not convert 'detection_RFID()' from 'void' to 'bool'
In file included from C:\Users\Benji861905\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:24:0,
                 from C:\Users\Benji861905\Arduino\hardware\arduino\avr\libraries\SPI/SPI.h:15,
                 from sketch_may28a.ino:1:
sketch_may28a.ino: In function 'void detection_RFID()':
sketch_may28a.ino:89:21: error: return-statement with a value, in function returning 'void' [-fpermissive]
sketch_may28a.ino:91:25: error: return-statement with a value, in function returning 'void' [-fpermissive]
sketch_may28a.ino:93:11: error: expected ';' before 'monModuleRFID'
In file included from C:\Users\Benji861905\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:24:0,
                 from C:\Users\Benji861905\Arduino\hardware\arduino\avr\libraries\SPI/SPI.h:15,
                 from sketch_may28a.ino:1:
sketch_may28a.ino:95:19: error: return-statement with a value, in function returning 'void' [-fpermissive]

  Ce rapport contiendrait plus d'informations si l'option
  "Montrer les informations de sortie pendant la compilation"
  était activée dans Fichier > Préférences.

Salut,
Change le prototype de la fonction
De

void detection_RFID()

À

bool detection_RFID()

Sylvain

Merci a toi Sylvain est il manquer aussi un ; derrière else return false, mais le code donner m'active la led quand la carte et dessus et me la désactive quand je l’enlève je cherche a faire que quand je passe dessus elle reste allumer et quand je la repasse plus de 3s elle s’éteigne j'avais déjà mis un code au point :

  //definir les librairie
#include <SPI.h>
#include <RFID.h>

//code system
RFID monModuleRFID(10,5);
  
  
  //definir les variable
int UID[5]={};
int MASTERKEY[5]={131,9,104,0,226};
   int temps_defini = 2000;   //définition du temps de maintien désiré en ms
   int ledPin1 = 7;       
   int boutonPin1 = 4;
   long debut_de_detection;
   boolean variable_de_debut_de_detection = false;
   int etat_bouton1;
   boolean dernier_detect_cart_3s = false;
   int etat_led1 = LOW;
   const char courant_bouton = 9;
   boolean detect_cart_3s = false;


   void setup()   { 
   Serial.begin(9600);  
    //code system
  SPI.begin();
  monModuleRFID.init(); 
      pinMode(ledPin1, OUTPUT);     
      pinMode(boutonPin1, INPUT);
      pinMode(courant_bouton,OUTPUT);
      digitalWrite(courant_bouton, HIGH);
   }

   
   void loop(){
      detection_RFID();//verification du rfid                       //lecture de l'état des boutons
      if (detect_cart_3s == true && dernier_detect_cart_3s == false){      //détection de l'appui sur le bouton 1
         debut_de_detection = millis();                                   //initialisation du compteur 1
         variable_de_debut_de_detection = true;                                          //enregistrement du changement d'état du bouton 1
      }
      if ( variable_de_debut_de_detection == true && detect_cart_3s == true && dernier_detect_cart_3s == true){    //le bouton 1 était et est toujours appuyé
                                                                                 
         if ((millis() - debut_de_detection) >= temps_defini){             //est-ce que le temps choisi est écoulé ?                                 
            etat_led1 = LOW;                              //déclaration d'allumage de la led 1 
            delay(50);
         }             
      }
      
      dernier_detect_cart_3s = detect_cart_3s;                       //actualisation de l'état du bouton
      digitalWrite(ledPin1, etat_led1);                        //allumage physique de la led

   }
   
   void detection_RFID(){
  if (monModuleRFID.isCard()) {  
          if (monModuleRFID.readCardSerial()) {       
            for(int i=0;i<=4;i++)
            {
              UID[i]=monModuleRFID.serNum[i];
            }
          }
          
          if (UID[0] == MASTERKEY[0]
           && UID[1] == MASTERKEY[1]
           && UID[2] == MASTERKEY[2]
           && UID[3] == MASTERKEY[3]
           && UID[4] == MASTERKEY[4])
          {
           etat_led1 = HIGH;
           detect_cart_3s = true;
          }
          else
          {
            
          }          
          monModuleRFID.halt();
    }
    else{
            detect_cart_3s = false;
          }
  }

mais je voulais l’intégrer a mon code de dépare, car ce code vas me servir pour démarre ma voiture avec un rfid.
Merci encore a vous deux de prendre un peut de temps pour m'aider et aussi si vous pouviez me dire a quoi correspond ce "bool"

type boolean ne peut prendre pour valeur que true ou false

Daccord merci dfgh :slight_smile:

Essaye ça :

#include <SPI.h>
#include <RFID.h>

RFID monModuleRFID(10,5);

int UID[5]={};
int MASTERKEY[5]={131,9,104,0,226};

const char led_rouge = 8;
const char led_vert = 7;
const char relais_1 = 2;
const char relais_2 = 3;
const char bouton_de_demarage = 4;
const char courant_bouton = 9;

unsigned long temps_defini = 2000;
unsigned long cptr=0;
book bDemarre = false;

void setup(){

  Serial.begin(9600);

  SPI.begin();
  monModuleRFID.init(); 

  pinMode(led_rouge, OUTPUT);
  pinMode(led_vert, OUTPUT);
  pinMode(relais_1,OUTPUT);
  pinMode(relais_2,OUTPUT);
  pinMode(courant_bouton,OUTPUT);
  digitalWrite(courant_bouton, HIGH);

}

void demarrer()
{
digitalWrite(led_vert, HIGH);digitalWrite(led_rouge, LOW);
    digitalWrite(relais_1,HIGH);
}

void arreter()
{
digitalWrite(led_rouge, HIGH);digitalWrite(led_vert, LOW);
      digitalWrite(relais_1,LOW);
}

void loop() {

  if(detection_RFID() == true) {
if (!bDemarre)
{
demarrer();
bDemarre = true;
while ( detection_RFID());
}
else
{
if (cptr ==0)
cptr=millis ();
else if ((millis()-cptr)> temps_defini)
{
arreter();
bDemarre = false;
cptr=0;
while ( detection_RFID());
}
}
}

}

bool detection_RFID(){

  if (monModuleRFID.isCard()) {  

          if (monModuleRFID.readCardSerial()) {   
    
            for(int i=0;i<=4;i++)
            {
              UID[i]=monModuleRFID.serNum[i];
            }
          }
          
          if (UID[0] == MASTERKEY[0]
           && UID[1] == MASTERKEY[1]
           && UID[2] == MASTERKEY[2]
           && UID[3] == MASTERKEY[3]
           && UID[4] == MASTERKEY[4])
          {

             return true;
            
          } else return false;      
  
          monModuleRFID.halt();

    } else return false;
      
  }

Fais devant la télé alors je promet rien...

Le la led s’éteint mais se rallume tout de suite après quand je laisse plus de 3 seconde, et je ne connaissait pas book bDemarre = false; mais j'ai vite deviner que c’était bool bDemarre = false; mais plutôt pas mal pour quelqu'un qui code devant la télé je n'aurais pas pu faire mieux :wink:

Voila problème résolut !!!!
Je ne lai pas coder en regardant la télé mais il marche :wink:
Je ne m'été peut-être pas bien exprimer mais merci encore a vous tout pour m'avoir aider !!!!

///////////////////////////////////////////////////
//          Programme Demarer la voiture         //
///////////////////////////////////////////////////
 
//definir les librairie
    #include <SPI.h>
    #include <RFID.h>

//code system
    RFID monModuleRFID(10,5);
  
  
//definir les variable
    int UID[5]={};
    int MASTERKEY[5]={131,9,104,0,226};
    const char led_vert = 7; //led de test
    const char led_rouge = 8; //led de test
    const char relais_1 = 2; //relais pour le contact
    const char relais_2 = 3; //relais pour le demararge
    const char bouton_de_demarage = 4; //bouton de demarage
    boolean contact_activer = false; //verification du contact
    boolean retar_contact_activer = false; //envoie les donnée vers "contact_activer" avec retardateur
    boolean demarage_activer = false; //savoir quand le demarage est activer
    int temps_defini = 2000;   //définition du temps de maintien désiré en ms pour desactiver 
    long debut_de_detection;  //variable pour compter le temps de maintien du badge
    boolean variable_de_debut_de_detection = false; //variable qui detecte quand la carte est activer
    boolean dernier_detect_cart_3s = false; //variable qui detect la derniere fois que la carte est rester plus de 3s
    const char courant_bouton = 9; //courant envoyer au bouton de demarage
    boolean detect_cart_3s = false;  // variable qui detecte si la carte est la depui plu de 3s

    
    void setup()   { 
    Serial.begin(9600);  //code pour la consol
    SPI.begin();//code system
    monModuleRFID.init();//code system
    pinMode(led_rouge, OUTPUT);  //led de test en entrer
    pinMode(led_vert, OUTPUT); //led de test en entrer
    pinMode(courant_bouton,OUTPUT); //courant du bouton en sortie
    pinMode(relais_1,OUTPUT); //relai1 en entrer
    pinMode(relais_2,OUTPUT); //relai1 en entrer
    digitalWrite(courant_bouton, HIGH); //courant du bouton allumer
    }

   
   void loop(){
      detection_RFID(); //lance le void de detection
      plus_de_3s(); //lance le void de calcul de plus de 3s
      if(contact_activer == true){ //variable si le contact est activer
        digitalWrite(led_vert,HIGH);
        digitalWrite(led_rouge,LOW);
        digitalWrite(relais_1,HIGH);
        }
      else{
          digitalWrite(led_rouge,HIGH);
          digitalWrite(led_vert,LOW);
          digitalWrite(relais_1,LOW);
          }
          contact_activer = retar_contact_activer; //sincronise le contact avec le retardateur
      }
   
   
   void plus_de_3s(){
     if (detect_cart_3s == true && dernier_detect_cart_3s == false){ //détection du badge
         debut_de_detection = millis();  //initialisation du compteur
         variable_de_debut_de_detection = true; //enregistrement du changement du badge
      }
      if ( variable_de_debut_de_detection == true && detect_cart_3s == true && dernier_detect_cart_3s == true){ //le badge etait toujours detecter
                                                                                 
         if ((millis() - debut_de_detection) >= temps_defini){ //calcule du temps ecouler                                 
               retar_contact_activer = false; //si plus de 3s alors le retar est = a false
            delay(50); //on laise a delai de 50ms
         }             
      }                                                
      dernier_detect_cart_3s = detect_cart_3s; //on change la variable pour le renouvellement de la boucle
   }
   
   
   //void de detection du RFID
   void detection_RFID(){
  if (monModuleRFID.isCard()) {  
          if (monModuleRFID.readCardSerial()) {       
            for(int i=0;i<=4;i++)
            {
              UID[i]=monModuleRFID.serNum[i];
            }
          }
          
          if (UID[0] == MASTERKEY[0]
           && UID[1] == MASTERKEY[1]
           && UID[2] == MASTERKEY[2]
           && UID[3] == MASTERKEY[3]
           && UID[4] == MASTERKEY[4])
          {
           retar_contact_activer = true; //si il detecte le bon alors on mais le retard = a true
           detect_cart_3s = true; //si il detecte le bon alors on lance le detect cart
          }
          else
          {
           //si il detect le mauvais alor rien ne se passe 
          }          
          monModuleRFID.halt();
    }
    else{
            detect_cart_3s = false; //si il n'en detecte pas alor on ne lance pas ou anule la detection pour le compteur
          }
  }

Nickel :slight_smile: