Сканер отпечатка пальца

kasumali
Offline
Зарегистрирован: 11.11.2015

Помогите пожалуйста написать массив для сканера отпечатков пальцев. Необходимо чтобы отпечаток пальца мог зписать в базу по 5 отпечатков 5 разных людей. Проще говоря массив 5*5. У меня в коде можно сохранять только один отпечаток.

 

#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>

uint8_t getFingerprintEnroll(int id);


// pin #2 is IN from sensor (GREEN wire)
// pin #3 is OUT from arduino  (WHITE wire)
SoftwareSerial mySerial(2, 3);

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

void setup()  
{
  Serial.begin(9600);
  Serial.println("fingertest");

  // set the data rate for the sensor serial port
  finger.begin(57600);
  
  if (finger.verifyPassword()) {
    Serial.println("Found fingerprint sensor!");
  } else {
    Serial.println("Did not find fingerprint sensor :(");
    while (1);
  }
}

void loop()                     // run over and over again
{
  Serial.println("Type in the ID # you want to save this finger as...");
  int id = 0;
  while (true) {
    while (! Serial.available());
    char c = Serial.read();
    if (! isdigit(c)) break;
    id *= 10;
    id += c - '0';
  }
  Serial.print("Enrolling ID #");
  Serial.println(id);
  
  while (!  getFingerprintEnroll(id) );
}

uint8_t getFingerprintEnroll(int id) {
  int p = -1;
  Serial.println("Waiting for valid finger to enroll");
  while (p != FINGERPRINT_OK) {
    p = finger.getImage();
    switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Image taken");
      break;
    case FINGERPRINT_NOFINGER:
      Serial.println(".");
      break;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("Communication error");
      break;
    case FINGERPRINT_IMAGEFAIL:
      Serial.println("Imaging error");
      break;
    default:
      Serial.println("Unknown error");
      break;
    }
  }

  // OK success!

  p = finger.image2Tz(1);
  switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Image converted");
      break;
    case FINGERPRINT_IMAGEMESS:
      Serial.println("Image too messy");
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("Communication error");
      return p;
    case FINGERPRINT_FEATUREFAIL:
      Serial.println("Could not find fingerprint features");
      return p;
    case FINGERPRINT_INVALIDIMAGE:
      Serial.println("Could not find fingerprint features");
      return p;
    default:
      Serial.println("Unknown error");
      return p;
  }
  
  Serial.println("Remove finger");
  delay(2000);
  p = 0;
  while (p != FINGERPRINT_NOFINGER) {
    p = finger.getImage();
  }

  p = -1;
  Serial.println("Place same finger again");
  while (p != FINGERPRINT_OK) {
    p = finger.getImage();
    switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Image taken");
      break;
    case FINGERPRINT_NOFINGER:
      Serial.print(".");
      break;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("Communication error");
      break;
    case FINGERPRINT_IMAGEFAIL:
      Serial.println("Imaging error");
      break;
    default:
      Serial.println("Unknown error");
      break;
    }
  }

  // OK success!

  p = finger.image2Tz(2);
  switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Image converted");
      break;
    case FINGERPRINT_IMAGEMESS:
      Serial.println("Image too messy");
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("Communication error");
      return p;
    case FINGERPRINT_FEATUREFAIL:
      Serial.println("Could not find fingerprint features");
      return p;
    case FINGERPRINT_INVALIDIMAGE:
      Serial.println("Could not find fingerprint features");
      return p;
    default:
      Serial.println("Unknown error");
      return p;
  }
  
  
  // OK converted!
  p = finger.createModel();
  if (p == FINGERPRINT_OK) {
    Serial.println("Prints matched!");
  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
    Serial.println("Communication error");
    return p;
  } else if (p == FINGERPRINT_ENROLLMISMATCH) {
    Serial.println("Fingerprints did not match");
    return p;
  } else {
    Serial.println("Unknown error");
    return p;
  }   
  
  Serial.print("ID "); Serial.println(id);
  p = finger.storeModel(id);
  if (p == FINGERPRINT_OK) {
    Serial.println("Stored!");
  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
    Serial.println("Communication error");
    return p;
  } else if (p == FINGERPRINT_BADLOCATION) {
    Serial.println("Could not store in that location");
    return p;
  } else if (p == FINGERPRINT_FLASHERR) {
    Serial.println("Error writing to flash");
    return p;
  } else {
    Serial.println("Unknown error");
    return p;
  }   
}

 

alexval2007
Offline
Зарегистрирован: 10.11.2012

а что за железка где взяли

kasumali
Offline
Зарегистрирован: 11.11.2015

Сканер отпечатков пальцев заказал на Али экспресс и подключил к ардуино уно. Необходим массив 5*5 для отпечатков пальцев. У меня пока что только для одного отпечатка. Помогите кто может.

alexval2007
Offline
Зарегистрирован: 10.11.2012

а ссылку на товар можно тоже такой хочу

kasumali
Offline
Зарегистрирован: 11.11.2015

А Помочь можно? Вот ссылка http://ru.aliexpress.com/item/Free-Shipping-Fingerprint-Recognition-Module-Optical-fingerprint-Fingerprint-Module-For-Arduino-in-stock-Best-quality/1615609897.html

Кто поможет с массивом ????? Его нужно на ардуино писать.

alexval2007
Offline
Зарегистрирован: 10.11.2012

вам нужен массив 5 на 5 я так понимаю, вот к примеру мы делали двух мерный массив 2 на 10 по аналогии можно сделать как вам нужно я неразбирался пока с вашим кодом как куплю себе такоежелезо так и займусь пока мало времени но надеюсь вы поняли суть

int CueDelay[2][10] = {{ Cue1, Cue2, Cue3, Cue4, Cue5, Cue6, Cue7, Cue8, Cue9, Cue10}, 
{Cue11, Cue12, Cue13, Cue14, Cue15, Cue16, Cue17, Cue18, Cue19, Cue20}};

и в цикле работаем с массивом

for (j=0; j < 2; j++)
{ 
   for (i=2; i < CueNumber+2; i++)
   { 
       digitalWrite(i,HIGH);//sets Cue ON 
       delay(CueHIGH); 
       digitalWrite(i,LOW);//sets Cue OFF 
        delay(CueDelay[j][i-2]); 
   } 

 

kasumali
Offline
Зарегистрирован: 11.11.2015

alexval2007 пишет:

вам нужен массив 5 на 5 я так понимаю, вот к примеру мы делали двух мерный массив 2 на 10 по аналогии можно сделать как вам нужно я неразбирался пока с вашим кодом как куплю себе такоежелезо так и займусь пока мало времени но надеюсь вы поняли суть

int CueDelay[2][10] = {{ Cue1, Cue2, Cue3, Cue4, Cue5, Cue6, Cue7, Cue8, Cue9, Cue10}, 
{Cue11, Cue12, Cue13, Cue14, Cue15, Cue16, Cue17, Cue18, Cue19, Cue20}};

и в цикле работаем с массивом

for (j=0; j < 2; j++)
{ 
   for (i=2; i < CueNumber+2; i++)
   { 
       digitalWrite(i,HIGH);//sets Cue ON 
       delay(CueHIGH); 
       digitalWrite(i,LOW);//sets Cue OFF 
        delay(CueDelay[j][i-2]); 
   } 

 

а если без массива, просто хотя бя 3 отпечатка можно было записать. Как вообще можно увеличить количество отпечатков пальцев которые можно сохранить в памяти?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Вообще-то массив нужен как раз для того, чтобы иметь возможность работать не с одним объектом, а с несколькими.

Но если не нравится массив, можно использовать вектор, список, стек, очередь - да мало ли еще структур данных, которыми с различной степенью успеха можно заменить массив...

alexval2007
Offline
Зарегистрирован: 10.11.2012

поробуйте почитать описание этого сканера насколько я понял он хранит отпечатки внутри себя на микросхеме памяти а вот сколько в него помещается незнаю надо переводить читать разбиратся смотреть библиотеку у меня нет столько свободного времени сейчас http://www.adafruit.com/datasheets/ZFM%20user%20manualV15.pdf так бегло посмотрел на сайте

  • Подпись файла: 256 байт
  • Файл шаблона: 512 байт
  • Емкость: 162 шаблонов

Наверно он может хранить 162 отпечатка но неуверен ну и библиотеку поковыряйте  https://github.com/adafruit/Adafruit-Fingerprint-Sensor-Library  там есть функции прочитать отпечаток и выбирается его айди номер есть функция чтобы узнать сколько отпечатков в базе есть для сохранения отпечатка и тп но это сложная тема не на раз два вам остается разбиратся самому или нанять когото на форуме есть раздел

да вот еще http://www.adafruit.com/datasheets/SFGDemoV2.0.rar программное обеспечение SFGdemo, чтобы зарегистрировать палец пользователя или в библиотеке скетчи есть для этого но это занимает место в ардуино  delete.ino и enroll.ino для удаления и регистрации нового отпечатка http://www.instructables.com/id/fingerprint-arduino-with-16x2-LCD/?ALLSTEPS статья