1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
| #include <SoftwareSerial.h>
#include <SPI.h> //Librairie pour la communication SPI ??????????????????????????
#include <SD.h> //Librairie pour la communication avec la carte SD
//Déclaration
SoftwareSerial lecteurRFID(D5, D6); //Définition du port du lecteur RFID
bool IdentifiantValide = false;
//Variables pour les LED
const int LV = D2;
const int LR = D8;
//Variables pour le capteur ultrason
const byte TRIG = D4; // Broche TRIGGER
const byte ECHO = D3; // Broche ECHO
const unsigned long MEASURE_TIMEOUT = 25000UL; // 25ms = ~8m à 340m/s //COMPRENDRE BIEEEEEEEEEEEN
const float SOUND_SPEED = 340.0 / 1000;
//Variables de stockage
File BDD; //Fichier contenant la base de donnée
String identifiant = ""; //variable de stockage de l'identifiant lu sur la carte RFID
String test = ""; //variable de stockage des identifiants sur la carte BDD de la carte SD
char c = 0; //variable de lecture
void setup()
{
lecteurRFID.begin(9600);//initialisation de la communication avec le port SoftSerial?????????
Serial.begin(9600);//initialisation de la communication avec le moniteur série
pinMode(LV, OUTPUT); //initialisation de la broche LV=4 comme sortie
pinMode(LR, OUTPUT); //initialisation de la broche LR=8 comme sortie
pinMode(TRIG, OUTPUT);//initialisation de la broche TRIG=3 comme sortie
digitalWrite(TRIG, LOW); //La broche TRIGGER doit être à LOW au repos
pinMode(ECHO, INPUT);//initialisation de la broche ECHO=2 comme sortie
}
void loop()
{
//////////////1. DETECTION PRESENCE DU VEHICULE
//1ère détection
/* 1. Lance une mesure de distance en envoyant une impulsion HIGH de 10µs sur la broche TRIGGER */
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
/* 2. Mesure le temps entre l'envoi de l'impulsion ultrasonique et son écho (si il existe) */
long measure= measure = pulseIn(ECHO, HIGH, MEASURE_TIMEOUT);
float distance_mm = measure / 2.0 * SOUND_SPEED; // ???????????? Calcul la distance à partir du temps mesuré
/* 3. Calcul la distance à partir du temps mesuré */
Serial.print("Distance: ");//ENLEVEEEEEEEEEEER
Serial.print(distance_mm);//ENLEVEEEEEEEEEEEEEEEER
if (distance_mm < 700)//On teste la présence d'un véhicule à moins de 7cm (portée de la carte RFID)????????????
{
Serial.println("Voiture présente");
//2ème détection : on vérifie que la voiture soit toujours là après 5 secondes pour être sûrs que l'automobiliste s'est bien garé
delay(5000);
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
long measure2 = pulseIn(ECHO, HIGH, MEASURE_TIMEOUT);
float distance2_mm = measure2 / 2.0 * SOUND_SPEED; //
Serial.print("Distance: ");//ENLEVEEEEEEEEEEER
Serial.print(distance2_mm);//ENLEVEEEEEEEEEEEEEEEER
////////////// PRESENCE D'UN VEHICULE
if (distance2_mm < 700)
{
Serial.println("Voiture garée");
//////////////2. LECTURE DE L'IDENTIFIANT SUR LA CARTE RFID
if (lecteurRFID.available())// if date is coming from software serial port ==> data is coming from SoftSerial shield
{
while (identifiant.length() < 26) //tant que notre variable n'a pas la taille d'un identifiant RFID (26 caractères)
{
identifiant += lecteurRFID.read(); //On écrit l'identifiant dans notre variable de stockage
}
/////////////2. VERIFICATION DE L'IDENTIFIANT : on cherche à savoir si l'identifiant lu sur la carte RFID est bien celui d'un handicapé
Serial.println("Initialisation.....");
if (!SD.begin(D10)) {//test de la communication avec la carte sur le pin 10 (CS) ////DECLARER AUTRE PART????????????????????????????????,
Serial.println("Communication impossible");
return; //Arrête le programme
}
Serial.println("Communication réussie");
if (SD.exists("bdd.txt")) {
Serial.println("Le fichier bdd.txt existe");
} else {
Serial.println("Le fichier bdd.txt n'existe pas");
return; //Arrête le programme ???????????????????????????????????????
}
//Lecture du fichier
Serial.println("Ouverture du fichier en mode lecture");
if (!(BDD = SD.open("bdd.txt", FILE_READ))) { //test d'ouverture du fichier ??????????
Serial.println("Erreur de fichier");
return; //Arrête le programme ????????tester ca en changeant le nom du fichier
}
Serial.println("Fichier ouvert");
while (c != -1) {//Tant qu'il ya des
c = BDD.read(); //on lit un caractère
if (c == ':') { //si : on affiche la valeur de test
Serial.println(test); //affichage sur le moniteur ENLEVEEEEEER
Serial.println(identifiant);// ENLEVEEEEEEEEEEEEER
//IDENTIFIANT VALIDE :
if (test == identifiant) {
IdentifiantValide = true; //Le booléen est mis à jour pour signifier que l'identifiant est valide
Serial.println("Le véhicule garé est bien en son droit");//ENLEVEEEEEEEEEEEER
digitalWrite(LV, HIGH); //On allume la LED verte pour signifier à l'automobiliste qu'il est en son droit
delay(5000);//On laisse la LED allumée 1 seconde ???????????????
digitalWrite(LV, LOW); //On éteint la LED
test = ""; //On vide la variable de stockage de l'identifiant lu sur la carte SD
}
else {
Serial.println("pas de correspondance");//ENLEVEEEEEEEEER
test = ""; //On vide la variable de stockage de l'identifiant lu sur la carte SD
}
}
else { // sinon
test += c; //on ajoute le caractère à la chaîne
}
}
//IDENTIFIANT INVALIDE;
if (IdentifiantValide == false) //Si l'identifiant lu sur la carte RFID n'est pas valide
{
Serial.println("Le véhicule est en infraction");//ENLEVEEEEEEEEEEEER
digitalWrite(LR, HIGH); //On allume la LED rouge58 pour signifier à l'automobiliste qu'il est en son droit
delay(5000);//On laisse la LED allumée 1 seconde ???????????????
digitalWrite(LR, LOW); //On éteint la LED
}
BDD.close(); //Fermeture du fichier
Serial.println("Fichier fermé");
identifiant = ""; //On vide la variable de stockage de l'identifiant lu sur la carte RDIF
c = 0; //On réinitialise la variable de lecture
IdentifiantValide = false; //On réinitialise le booléen (on le remet par défaut en mode :"identifiant invalide"
}
else {
Serial.println("Pas de données détectées");//ENLEVEEEEEER
}
}
else
Serial.println("Voiture partie");
}
else
{
Serial.println("Voiture non présente");
}
delay(1000);//Le capteur à ultrason vérifiera la présence de voitures toutes les secondes
} |
Partager