/***************************************************
  Пример работы оптического датчика отпечатков пальцев
  Разработанный для работы с Adafruit BMP085 Breakout Http://www.adafruit.com/products/751
  Автор Limor Fried/Ladyada для Adafruit Industries.

  Код модифицирован и откомментирован  http://iarduino.ru
  Сканер отпечатков пальцев для Arduino http://iarduino.ru/shop/Expansion-payments/skaner-otpechakov-palcev.html

  ### ПОИСК СОВПАДЕНИЙ ТЕКУЩЕГО ОТПЕЧАТКА ПАЛЬЦА С БАЗОЙ МОДУЛЯ ###
 ****************************************************/

// Линия RX (Receive)  arduino (вывод 2), подключается к ЗЕЛЁНОМУ проводу датчика T (Transmit)
// Линия TX (Transmit) arduino (вывод 3), подключается к БЕЛОМУ   проводу датчика R (Receive)

#include <Adafruit_Fingerprint.h>                               // подключаем библиотеку для работы с модулем отпечатков пальцев
#include <SoftwareSerial.h>                                     // подключаем библиотеку для работы с программным UART

SoftwareSerial       mySerial(2, 3);                            // объявляем объект mySerial для работы с библиотекой SoftwareSerial ИМЯ_ОБЪЕКТА( RX, TX ); // Можно указывать любые выводы, поддерживающие прерывание PCINTx
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);  // объявляем объект finger   для работы с библиотекой Adafruit_Fingerprint ИМЯ_ОБЪЕКТА = Adafruit_Fingerprint(ПАРАМЕТР); // ПАРАМЕТР - ссылка на объект для работы с UART к которому подключен модуль, например: &Serial1

void setup(){
  while(!Serial);                                               // Ожидание инициализации аппаратного UART
  delay(500);                                                   // Ожидание инициализации модуля отпечатков пальцев
  Serial.begin(9600);                                           // Инициализация аппаратного UART на скорости 9600
  Serial.println("Scan sensor...");                             // Вывод сообщения "Поиск сенсора"
  finger.begin(57600);                                          // Инициализация программного UART на скорости 57600 (скорость модуля по умолчанию)
  if(finger.verifyPassword()){Serial.println("Found sensor!");} // Если модуль отпечатков    обнаружен, выводим сообщение "сенсор обнаружен"
  else{Serial.println("Did not find sensor :("); while(1);    } // Если модуль отпечатков не обнаружен, выводим сообщение "сенсор не обнаружен" и входим в бесконечный цикл: while(1);
  Serial.println("Please put your finger on the scanner ...");
}

void loop(){
  if(finger.getImage()         == FINGERPRINT_OK){              // Захватываем изображение, если результат выполнения равен константе FINGERPRINT_OK (корректная загрузка изображения), то проходим дальше
  if(finger.image2Tz()         == FINGERPRINT_OK){              // Конвертируем полученное изображение, если результат выполнения равен константе FINGERPRINT_OK (изображение сконвертировано), то проходим дальше
  if(finger.fingerFastSearch() == FINGERPRINT_OK){              // Находим соответствие в базе данных отпечатков пальцев, если результат выполнения равен константе FINGERPRINT_OK (найдено соответствие), то проходим дальше
    Serial.print("Found ID=");
    Serial.print(finger.fingerID); 
    Serial.print(", with confidence of ");
    Serial.println(finger.confidence);
  }}}
  delay(500);                                                    // Задержка перед следующим сканированием 0,5 сек (нет смысла запускать на полной скорости)
}