Bonsoir,
pour mon projet de SI, je dois coder entre autres un capteur d'empreintes Adafruit qui fonctionne très bien, mais le code me préoccupe. En fait, lorsque l'on place son doigt avec un certain code, on reçoit l'ID de l'empreinte ainsi reconnue. Mon problème est dans le code: je comprends plus ou moins ce dernier, mais il est hors du void loop() donc c'est très dérangeant ... Je ne comprends pas l’intérêt. Mon but est de sécuriser un système en permettant de, tant qu'aucune empreinte n'a été reconnue, le code est freeze (boucle infinie sans doute). Mais voilà, à cause de ce code hors de la loop, je suis troublé.
Voici ce que j'ai déjà essayé de faire (si on ne laisse que la partie empreinte digitale):
#include <LiquidCrystal_I2C.h>
#include "RTClib.h"
#include <Adafruit_Fingerprint.h>
LiquidCrystal_I2C lcd(0x27,20,4); // On indique l'adresse de l'écran 20x4 qui est "0x27"
//Empreinte digitale
#include <SoftwareSerial.h>
SoftwareSerial mySerial(6, 5); //(TX, RX)
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
boolean boucleUneFois = false; //Variable pour executer une boucle qu'une seule fois
//Empreinte digitale
void setup()
{
// Positionnement horloge a run-mode et desactive protection en ecriture
lcd.init(); // Initialisation de l'écran LCD
lcd.backlight(); // Allumer la lumière de l'écran LCD qui rend les caractères plus visibles
if (finger.verifyPassword()) {
lcd.setCursor(0, 0);
lcd.print("Capteur d'empreintes");
lcd.setCursor(0, 1);
lcd.print("detecte");
} else {
lcd.setCursor(0, 0);
lcd.print("Capteur d'empreintes");
lcd.setCursor(0, 1);
lcd.print("non detecte");
while (1) { delay(1); }
} delay(2000);
lcd.clear();
finger.getTemplateCount();
lcd.setCursor(0, 0);
lcd.print(finger.templateCount);
lcd.print(" modele(s)");
lcd.setCursor(0, 1);
lcd.print("deja stocke(s)");
delay(2000);
lcd.clear();
}
void loop()
{
{
getFingerprintIDez();
delay(50); //don't need to run this at full speed.
}
if ((boucleUneFois) == false)
{
{
//Ecrire "Bienvenue, ***** sur l'écran LCD
if ((finger.fingerID) == 1){
Serial.println("Bienvenue, François");
}
if ((finger.fingerID) == 2){
Serial.println("Bienvenue, Guillaume");
}
if ((finger.fingerID) == 3){
Serial.println("Bienvenue, Lucas");
}
if ((finger.fingerID) == 4){
Serial.println("Bienvenue, Philippe");
}
}
boucleUneFois = true;
}
}
//Là, on est plus dans la loop ;_;
uint8_t getFingerprintID() {
uint8_t p = finger.getImage();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image prise");
break;
case FINGERPRINT_NOFINGER:
Serial.println("Aucune empreinte détectée");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Erreur de communication");
return p;
case FINGERPRINT_IMAGEFAIL:
Serial.println("Erreur d'image");
return p;
default:
Serial.println("Erreur inconnue ??!");
return p;
}
// OK success!
p = finger.image2Tz();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image convertie");
break;
case FINGERPRINT_IMAGEMESS:
Serial.println("L'image est trop imprécise");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Erreur de communication");
return p;
case FINGERPRINT_FEATUREFAIL:
Serial.println("Impossible de trouver les sillons de l'empreinte digitale");
return p;
case FINGERPRINT_INVALIDIMAGE:
Serial.println("Impossible de trouver les sillons de l'empreinte digitale");
return p;
default:
Serial.println("Erreur inconnue ??!");
return p;
}
// OK converted!
p = finger.fingerFastSearch();
if (p == FINGERPRINT_OK) {
Serial.println("Une empreinte a été reconnue !");
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("Erreur de communication");
return p;
} else if (p == FINGERPRINT_NOTFOUND) {
Serial.println("Aucune empreinte reconnue");
return p;
} else {
Serial.println("Erreur inconnue ??!");
return p;
}
// found a match!
Serial.print("ID trouvé ! #"); Serial.print(finger.fingerID);
Serial.print(" avec une précision de "); Serial.println(finger.confidence);
return finger.fingerID;
}
// returns -1 if failed, otherwise returns ID #
int getFingerprintIDez() {
uint8_t p = finger.getImage();
if (p != FINGERPRINT_OK) return -1;
p = finger.image2Tz();
if (p != FINGERPRINT_OK) return -1;
p = finger.fingerFastSearch();
if (p != FINGERPRINT_OK) return -1;
// found a match!
Serial.print("ID trouvé ! #"); Serial.print(finger.fingerID);
Serial.print(" avec une précision de "); Serial.println(finger.confidence);
return finger.fingerID;
}
Voilà, si jamais vous ne savez pas trop mais que vous pouvez quand même m'expliquer cette histoire de loop, ça serait super sympa
Passez une bonne soirée