RFID Ouverture en passant le badge et fermeture en repassant le même badge

Bonjour, comme vous avez vu dans le titre, je cherche a ouvrir la porte en passant mon badge, et pour la refermer, repasser le même badge. Pour l’instant j’arrive juste a l’ouvrir mais après un certain temps la porte se ferme, or moi je veut passer le badge pour quel se ferme. Voici mon code:

#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>

#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN); 

 const int LR = 5;
 const int LV = 6;
 Servo monServomoteur;
 
void setup() 
{
  Serial.begin(9600);
  SPI.begin();
  mfrc522.PCD_Init();
  Serial.println("Approximate your card to the reader...");
  Serial.println();
  pinMode(6, OUTPUT);
  pinMode(5, OUTPUT);
  monServomoteur.attach(2);
}
void loop() 
{
  if ( ! mfrc522.PICC_IsNewCardPresent()) 
  {
    return;
  }
  if ( ! mfrc522.PICC_ReadCardSerial()) 
  {
    return;
  }
  Serial.print("UID tag :");
  String content= "";
  byte letter;
  for (byte i = 0; i < mfrc522.uid.size; i++) 
  {
     Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
     Serial.print(mfrc522.uid.uidByte[i], HEX);
     content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
     content.concat(String(mfrc522.uid.uidByte[i], HEX));
  }
  Serial.println();
  Serial.print("Message : ");
  content.toUpperCase();
  if (content.substring(1) == "A6 66 D5 1A")
  {
    Serial.println("Authorized access");
    Serial.println();
    delay(10);

    digitalWrite (LV, HIGH);
        
      for (int position = 140; position >= 40; position--) {
    monServomoteur.write(position);
    delay(2);
  }
    {
    monServomoteur.write(40);
    delay(3000);
    }
      for (int position = 40; position <= 140; position++) {
    monServomoteur.write(position);
    delay(15);
  }
    digitalWrite (LV, LOW);   
  }
 
 else   {
    Serial.println(" Access denied");
    delay(10);
    digitalWrite (LR, HIGH);
    delay(2000);
    digitalWrite (LR, LOW);
  }
}

Merci à ceux qui m’aiderons.

et quelle est la question? vous souhaitez qu’on re-écrive le programme pour vous ?

je ferai cela en programmation par machine à états (cf mon tuto éventuellement)

la structure du programme ressemblerait à un truc comme cela

#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>

#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);

const size_t MAXUIDSIZE = 4;
byte UID[MAXUIDSIZE];
const byte UIDcarteValide[MAXUIDSIZE] = {0xA6, 0x66, 0xD5, 0x1A};

const byte LR = 5;
const byte LV = 6;
const byte ServoPin = 2;
Servo monServomoteur;
const byte anglePorteOuverte = 40;
const byte anglePorteFermee = 140;


enum : byte {PORTE_FERMEE, PORTE_OUVERTE} etat;


boolean lireCarte()
{
  size_t uidSize;
  if (!mfrc522.PICC_IsNewCardPresent()) return false;
  if (!mfrc522.PICC_ReadCardSerial()) return false;

  // copier l'UID lu dans le tableau UID
  // ----------> on fait quoi ?

  return true;
}

boolean carteValide()
{
  if (!lireCarte()) return false;
  if (memcmp (UID, UIDcarteValide, MAXUIDSIZE)) {    // erreur de carte
    // ----------> on fait quoi ?
  } else {
    // ----------> on fait quoi ?
  }
}



void setup()
{
  Serial.begin(115200);
  SPI.begin();
  pinMode(LV, OUTPUT);
  pinMode(LR, OUTPUT);

  mfrc522.PCD_Init();

  monServomoteur.attach(ServoPin);
  monServomoteur.write(anglePorteFermee); // on ferme la porte au cas où
  etat = PORTE_FERMEE;

  Serial.println(F("Lecture de carte"));
}


void loop()
{
  if (carteValide()) {
    switch (etat) {
      case PORTE_FERMEE:
        // on a la bonne carte et on est fermé --> on ouvre
        // ----------> on fait quoi ?

        etat = PORTE_OUVERTE;
        break;

      case PORTE_OUVERTE:
        // on a la bonne carte et on est ouvert --> on ferme
        // ----------> on fait quoi ?

        etat = PORTE_FERMEE;
        break;
    }
  }
}

reste qu’à écrire les bouts qui manquent :slight_smile: