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;
}
}