Création place parking pour handicapé

Bonjour,

je n'arrive pas à avancer sur ce projet que j'ai délaissé depuis des mois faute de temps. Je comprends que des arduinistes confirmés n'aient pas envie de macher le travail d'un débutant. Aussi mon but n'est pas d'avoir la solution dans la foulée mais peut etre de m'aiguiller pour aller potasser telle ou telle fonction.

Mon probleme est le suivant : il s'agit d'une place de parking dont la barriere dont la barriere ne s'ouvre qu'apres la validation du badge RFID. Tout se passe comme prévu mais l'id du tag reste en mémoire ce qui fait que lorsqu'une nouvelle voiture se place devant la barriere, elle n'a pas a presenter de badge...

Je tourne autour du reset de l'id du tag et j'ai trouvé ceci :

    rfid.uid.uidByte[i] = 0;
    //Serial.print(mfrc522.uid.uidByte[i], HEX)

je voudrais conditionner cette réinitialisation du tag à un if distance > 40 " mais je ne vois pas comment procéder.

voici le code en entier :


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

#define SS_PIN 10
#define RST_PIN 9
#define LED_Verte 5 //define green LED pin
#define LED_Rouge 4 //define red LED
#define BUZZER 2 //buzzer pin, 
MFRC522 rfid(SS_PIN, RST_PIN);   // Create MFRC522 instance.
Servo myServo; //define servo name
UltraSonicDistanceSensor capteur_distance(6, 7);






void setup()
{
  Serial.begin(9600);   // Initiate a serial communication
  SPI.begin();      // Initiate  SPI bus
  rfid.PCD_Init();   // Initiate MFRC522
  myServo.attach(3); //servo pin
  myServo.write(0); //servo start position
  pinMode(LED_Verte, OUTPUT);
  pinMode(LED_Rouge, OUTPUT);
  pinMode(BUZZER, OUTPUT);
  noTone(BUZZER);
  Serial.println("Put your card to the reader...");
  Serial.println();


}
void loop()
{

  // Look for new cards
  if ( ! rfid.PICC_IsNewCardPresent())
  {
    Serial.println();
  
  }
  // Select one of the cards
  if ( ! rfid.PICC_ReadCardSerial())
  {
    Serial.println();  
  }
  //Show UID on serial monitor
  Serial.print("UID tag :");
  String content = "";
  byte letter;
  for (byte i = 0; i < rfid.uid.size; i++)
  {
    Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " ");
    Serial.print(rfid.uid.uidByte[i], HEX);
    content.concat(String(rfid.uid.uidByte[i] < 0x10 ? " 0" : " "));
    content.concat(String(rfid.uid.uidByte[i], HEX));
  }
  int distance = capteur_distance.measureDistanceCm();
  Serial.println();
  Serial.print("Message : ");
  content.toUpperCase();
  if (content.substring(1) == "E9 CA 97 98" && distance < 40 ) //change here the UID of the card/cards that you want to give access
  {
    Serial.println("Authorized access");
    Serial.println();
    delay(500);
    digitalWrite(LED_Verte, HIGH);
    tone(BUZZER, 500);
    delay(300);
    noTone(BUZZER);
    myServo.write(90);
    delay(1000);
 
  }  

  else 
  {
  
    Serial.println(" Access denied");
    digitalWrite(LED_Rouge, HIGH);
    delay(500);
    digitalWrite(LED_Rouge, LOW);
    delay(1000);
    tone(BUZZER, 300);
    delay(300);
    noTone(BUZZER);
    myServo.write(0);
    delay (1000);
    return;
    
  }
  
}
 

une piste, peut être, mettre à blanc ta variable "content" a la fin de ton test.

BAT

Si rien n'est fait si aucune carte n'est présentée, le traitement est quand même effectué.

 if ( ! rfid.PICC_IsNewCardPresent()) {
    Serial.println(F("No card ..."));
    return;
  }
  if ( ! rfid.PICC_ReadCardSerial()) {
    Serial.println(F("Error reading card ..."));
    return;
  }

return permet de ne rien faire.

Bonjour Bonjour,

je viens de régler mon probleme en programmant un état bas vers la PIN reset dans mon "else".. ca fonctionne !

merci pour votre temps