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

Модуль отпечатков пальцев ZFM-20 ... 60

Создаем свой блок. Вопросы, помощь знатоков.
Ответить
Аватара пользователя
Ivan_Kornege
Лейтенант
Сообщения: 342
Зарегистрирован: 29.04.2017{, 08:24}
Репутация: 27
Откуда: гАндурас
Имя: Ivan

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

#1

Сообщение Ivan_Kornege » 01.09.2018{, 19:00}

Модули отпечатков пальцев ZFM-20 и ZFM-60 достались на распродаже.
Пытаюсь применить в электронном замке на входную дверь.
Блоков я так понял никто не делал для ФлПрога.
Материалы для создания блока использую отсюда :
Сканер отпечатков пальцев
и
Контроль доступа по отпечатку пальца

Подходить решил поэтапно - сначала подключить сканер и выводить информацию на дисплей о его нахождении или отсутствии при обрыве контакта(или неисправности сканера).

Протестировал такой скетч, работает:

Код: Выделить всё

#include <SoftwareSerial.h>
#include <LiquidCrystal.h>
#include <Adafruit_Fingerprint.h>
LiquidCrystal _lcd1(8, 9, 4, 5, 6, 7);
int _dispTempLength1=0;
boolean _isNeedClearDisp1;

bool ScanS;
String ScanS_txt;
bool FoundS;
String FoundS_txt;
String PleaseFinger;
bool NotfoundS;
String NotfoundS_txt;
byte N_ID;
//SoftwareSerial mySerial(2, 3); // объявляем объект mySerial для работы с библиотекой SoftwareSerial ИМЯ_ОБЪЕКТА( RX, TX ); // Можно указывать любые выводы, поддерживающие прерывание PCINTx
SoftwareSerial mySerial( 2, 3); // объявляем объект mySerial для работы с библиотекой SoftwareSerial ИМЯ_ОБЪЕКТА( RX, TX ); // Можно указывать любые выводы, поддерживающие прерывание PCINTx
Adafruit_Fingerprint finger= Adafruit_Fingerprint(&mySerial); // объявляем объект finger   для работы с библиотекой Adafruit_Fingerprint ИМЯ_ОБЪЕКТА = Adafruit_Fingerprint(ПАРАМЕТР);   
// ПАРАМЕТР - ссылка на объект для работы с UART к которому подключен модуль, например: &Serial1
int _disp1oldLength = 0;
int _disp3oldLength = 0;
void setup()
{
pinMode(13, OUTPUT);

_lcd1.begin(16, 2);

_lcd1.clear();                                                             // стираем информацию с дисплея
_lcd1.setCursor(0, 0);  _lcd1.print("iArduino.ru");                        // выводим текст "iArduino.ru"
  delay(500);                                                              // обязательная задержка перед инициализацией модуля отпечатков пальцев
  finger.begin(57600);                                                     // инициируем модуль отпечатков пальцев, с подключением через программный UART на скорости 57600 (скорость модуля по умолчанию)
  _lcd1.clear();                                                           // стираем информацию с дисплея
  _lcd1.setCursor(0, 0);        _lcd1.print(F("Scan sensor..."));          // выводим текст "Scan sensor..."
  _lcd1.setCursor(0, 1);                                                   // устанавливаем курсор в позицию: 0 столбец, 1 строка
  if(finger.verifyPassword()){_lcd1.print("Found sensor");}                // если модуль отпечатков    обнаружен, выводим сообщение "сенсор обнаружен"
  else                       {_lcd1.print("Sensor not found"); while(1);}  // если модуль отпечатков не обнаружен, выводим сообщение "сенсор не обнаружен" и входим в бесконечный цикл: while(1);
  delay(1000);                                                             // необязательная задержка, чтоб можно было прочитать сообщение об обнаружении модуля
}


void loop() {
  // put your main code here, to run repeatedly:

}
Попробовал из него сделать пользовательский блок.

Хотел получать текстовые сообщения с выхода ПБ "ScanS" уровни 0 или 1, а с другого выхода "ScanS_txt" текстовое сообщение.
Fingerprint_scan_true.JPG
Fingerprint_scan_true.JPG (19.37 КБ) 1585 просмотров
Что то не получается.
Если в коде закомментировать " while(1);" тогда при отключенном сканере выводится "ScanS" уровнь 1, а с выхода "Scan_txt" текстовое сообщение.
Если раскомментировать " while(1);" перестает выводить .

Гуру подскажите или поправьте блок плиз.
Скачать проект с блоком отсюда

kalobyte
Лейтенант
Сообщения: 422
Зарегистрирован: 22.10.2016{, 14:22}
Репутация: 28

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

#2

Сообщение kalobyte » 01.09.2018{, 19:17}

у тебя часть кода не в том месте находится
while(1); это бесконечный цикл в секции, где должен быть одноразовый код
он у тебя выполнился один раз и потом контроллер просто тупо зациклился, не выполняя больше никакого кода

if(finger.verifyPassword()){_lcd1.print("Found sensor");} // если модуль отпечатков обнаружен, выводим сообщение "сенсор обнаружен"
else {_lcd1.print("Sensor not found");

этот кусок должен постоянно выполняться в секции луп
ну и у тебя нет куска кода, который отвечает за запись отпечатка
или он там заливается в сам сканер каким-то софтом заранее?

Аватара пользователя
Ivan_Kornege
Лейтенант
Сообщения: 342
Зарегистрирован: 29.04.2017{, 08:24}
Репутация: 27
Откуда: гАндурас
Имя: Ivan

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

#3

Сообщение Ivan_Kornege » 01.09.2018{, 19:36}

kalobyte писал(а):
01.09.2018{, 19:17}
у тебя часть кода не в том месте находится
while(1); это бесконечный цикл в секции, где должен быть одноразовый код
он у тебя выполнился один раз и потом контроллер просто тупо зациклился, не выполняя больше никакого кода
Это я знаю.
В скетче отсюда while(1); расположен в void setup(). Поэтому я его туда и затолкнул в блоке.
kalobyte писал(а):
01.09.2018{, 19:17}
if(finger.verifyPassword()){_lcd1.print("Found sensor");} // если модуль отпечатков обнаружен, выводим сообщение "сенсор обнаружен"
else {_lcd1.print("Sensor not found");

этот кусок должен постоянно выполняться в секции луп
Сейчас попробую переделать.
kalobyte писал(а):
01.09.2018{, 19:17}
ну и у тебя нет куска кода, который отвечает за запись отпечатка
или он там заливается в сам сканер каким-то софтом заранее?
Это следующий этап. Пытаюсь сначала запустить определение сканера.
Потом буду доплнять функционал.

Отправлено спустя 15 минут 19 секунд:
while(1); вообще убрать?

kalobyte
Лейтенант
Сообщения: 422
Зарегистрирован: 22.10.2016{, 14:22}
Репутация: 28

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

#4

Сообщение kalobyte » 01.09.2018{, 20:08}

Ivan_Kornege писал(а):
01.09.2018{, 19:51}
вообще убрать?
естественно, дальшей этой строки у тебя просто код не будет выполняться никогда

скетч отсюда
https://wiki.iarduino.ru/page/skaner-ot ... ov-palcev/
его писал какой-то поехавший

Аватара пользователя
Ivan_Kornege
Лейтенант
Сообщения: 342
Зарегистрирован: 29.04.2017{, 08:24}
Репутация: 27
Откуда: гАндурас
Имя: Ivan

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

#5

Сообщение Ivan_Kornege » 01.09.2018{, 20:21}

kalobyte писал(а):
01.09.2018{, 20:08}
естественно, дальшей этой строки у тебя просто код не будет выполняться никогда
если смотреть на пример от производителя то там также в void setup() присутствует while (1).
Вот кусок кода:

Код: Выделить всё

void setup()  
{
  Serial.begin(9600);
  while (!Serial);  // For Yun/Leo/Micro/Zero/...
  delay(100);
  Serial.println("\n\nAdafruit finger detect test");

  // 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) { delay(1); }
  }

  finger.getTemplateCount();
  Serial.print("Sensor contains "); Serial.print(finger.templateCount); Serial.println(" templates");
  Serial.println("Waiting for valid finger...");
}

Anydy

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

#6

Сообщение Anydy » 01.09.2018{, 20:41}

Не изучал, но насколько я понимаю в сетапе пока функция finger.verifyPassword() не вернула 1, то все ...программа стопориться

Аватара пользователя
Ivan_Kornege
Лейтенант
Сообщения: 342
Зарегистрирован: 29.04.2017{, 08:24}
Репутация: 27
Откуда: гАндурас
Имя: Ivan

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

#7

Сообщение Ivan_Kornege » 01.09.2018{, 21:08}

Anydy,
Вот этот код работает:

Код: Выделить всё

    #include <SoftwareSerial.h>
    #include <LiquidCrystal.h>
    #include <Adafruit_Fingerprint.h>
    LiquidCrystal _lcd1(8, 9, 4, 5, 6, 7);
    int _dispTempLength1=0;
    boolean _isNeedClearDisp1;
     
    bool ScanS;
    String ScanS_txt;
    bool FoundS;
    String FoundS_txt;
    String PleaseFinger;
    bool NotfoundS;
    String NotfoundS_txt;
    byte N_ID;
    //SoftwareSerial mySerial(2, 3); // объявляем объект mySerial для работы с библиотекой SoftwareSerial ИМЯ_ОБЪЕКТА( RX, TX ); // Можно указывать любые выводы, поддерживающие прерывание PCINTx
    SoftwareSerial mySerial( 2, 3); // объявляем объект mySerial для работы с библиотекой SoftwareSerial ИМЯ_ОБЪЕКТА( RX, TX ); // Можно указывать любые выводы, поддерживающие прерывание PCINTx
    Adafruit_Fingerprint finger= Adafruit_Fingerprint(&mySerial); // объявляем объект finger   для работы с библиотекой Adafruit_Fingerprint ИМЯ_ОБЪЕКТА = Adafruit_Fingerprint(ПАРАМЕТР);   
    // ПАРАМЕТР - ссылка на объект для работы с UART к которому подключен модуль, например: &Serial1
    int _disp1oldLength = 0;
    int _disp3oldLength = 0;
    void setup()
    {
    pinMode(13, OUTPUT);
     
    _lcd1.begin(16, 2);
     
    _lcd1.clear();                                                             // стираем информацию с дисплея
    _lcd1.setCursor(0, 0);  _lcd1.print("iArduino.ru");                        // выводим текст "iArduino.ru"
      delay(500);                                                              // обязательная задержка перед инициализацией модуля отпечатков пальцев
      finger.begin(57600);                                                     // инициируем модуль отпечатков пальцев, с подключением через программный UART на скорости 57600 (скорость модуля по умолчанию)
      _lcd1.clear();                                                           // стираем информацию с дисплея
      _lcd1.setCursor(0, 0);        _lcd1.print(F("Scan sensor..."));          // выводим текст "Scan sensor..."
      _lcd1.setCursor(0, 1);                                                   // устанавливаем курсор в позицию: 0 столбец, 1 строка
      if(finger.verifyPassword()){_lcd1.print("Found sensor");}                // если модуль отпечатков    обнаружен, выводим сообщение "сенсор обнаружен"
      else                       {_lcd1.print("Sensor not found"); while(1);}  // если модуль отпечатков не обнаружен, выводим сообщение "сенсор не обнаружен" и входим в бесконечный цикл: while(1);
      delay(1000);                                                             // необязательная задержка, чтоб можно было прочитать сообщение об обнаружении модуля
    }
     
     
    void loop() {
      // put your main code here, to run repeatedly:
     
    }
А когда я делаю блок и в флпрог получется такой код, то перестает работать:

Код: Выделить всё

#include <SoftwareSerial.h>
#include <LiquidCrystal.h>
#include <Adafruit_Fingerprint.h>
LiquidCrystal _lcd1(8, 9, 4, 5, 6, 7);
int _dispTempLength1=0;
boolean _isNeedClearDisp1;

bool ScanS;
String ScanS_txt;
bool FoundS;
String FoundS_txt;
bool NotfoundS;
String NotfoundS_txt;
String PleaseFinger;
byte N_ID;
//SoftwareSerial mySerial(2, 3); // объявляем объект mySerial для работы с библиотекой SoftwareSerial ИМЯ_ОБЪЕКТА( RX, TX ); // Можно указывать любые выводы, поддерживающие прерывание PCINTx
SoftwareSerial mySerial( 2, 3); // объявляем объект mySerial для работы с библиотекой SoftwareSerial ИМЯ_ОБЪЕКТА( RX, TX ); // Можно указывать любые выводы, поддерживающие прерывание PCINTx
Adafruit_Fingerprint finger= Adafruit_Fingerprint(&mySerial); // объявляем объект finger   для работы с библиотекой Adafruit_Fingerprint ИМЯ_ОБЪЕКТА = Adafruit_Fingerprint(ПАРАМЕТР);   
// ПАРАМЕТР - ссылка на объект для работы с UART к которому подключен модуль, например: &Serial1
int _disp1oldLength = 0;
int _disp2oldLength = 0;
int _disp3oldLength = 0;
void setup()
{
pinMode(13, OUTPUT);

_lcd1.begin(16, 2);

  delay(500);                                                              // обязательная задержка 0,5 сек перед инициализацией модуля отпечатков пальцев
  finger.begin(57600);                                                     // инициируем модуль отпечатков пальцев, с подключением через программный UART на скорости 57600 (скорость модуля по умолчанию)

ScanS = true;                                                                                   // пока идет поиск сенсора присутствует true
 ScanS_txt  = ("Scan sensor...") ;                                                  // Вывод сообщения "Поиск сенсора" в виде String

if(finger.verifyPassword())
 {
   FoundS = true;                                                                          // Если модуль отпечатков обнаружен появится уровень true   
   FoundS_txt = (String("Found sensor!")) ;                                         // Если модуль отпечатков обнаружен, выводим сообщение "сенсор обнаружен" ввиде String   
  }
  else                       
  {
    FoundS = false;                                                                          // Если модуль отпечатков не обнаружен на выходе FoundS появится уровень false
    NotfoundS = true;                                                                     // Если модуль отпечатков не обнаружен появится уровень true  
    NotfoundS_txt = ("Sensor not found");                                           // если модуль отпечатков не обнаружен, выводим сообщение "сенсор не обнаружен"
while(1);                                                                                      // если модуль отпечатков не обнаружен, выводим сообщение "сенсор не обнаружен" и входим в бесконечный цикл: while(1);
}                           

 delay(1000);                                                             // необязательная задержка, чтоб можно было прочитать сообщение об обнаружении модуля

}


void loop()
{if (_isNeedClearDisp1) {_lcd1.clear(); _isNeedClearDisp1= 0;}





//Плата:1


if (NotfoundS) {
_dispTempLength1 = ((NotfoundS_txt)).length();
if (_disp1oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;} 
_disp1oldLength = _dispTempLength1;
_lcd1.setCursor(0, 1);
_lcd1.print((NotfoundS_txt));
} else {
if (_disp1oldLength > 0) {_isNeedClearDisp1 = 1; _disp1oldLength = 0;} 
}
if (FoundS) {
_dispTempLength1 = ((FoundS_txt)).length();
if (_disp2oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;} 
_disp2oldLength = _dispTempLength1;
_lcd1.setCursor(0, 0);
_lcd1.print((FoundS_txt));
} else {
if (_disp2oldLength > 0) {_isNeedClearDisp1 = 1; _disp2oldLength = 0;} 
}
digitalWrite(13, ScanS);
if (ScanS) {
_dispTempLength1 = ((ScanS_txt)).length();
if (_disp3oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;} 
_disp3oldLength = _dispTempLength1;
_lcd1.setCursor(0, 0);
_lcd1.print((ScanS_txt));
} else {
if (_disp3oldLength > 0) {_isNeedClearDisp1 = 1; _disp3oldLength = 0;} 
}
}
Отправлено спустя 5 минут 2 секунды:
Fingerprint_scan_true_V0.JPG

kalobyte
Лейтенант
Сообщения: 422
Зарегистрирован: 22.10.2016{, 14:22}
Репутация: 28

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

#8

Сообщение kalobyte » 01.09.2018{, 21:18}

Ivan_Kornege писал(а):
01.09.2018{, 21:08}
while(1); // если модуль отпечатков не обнаружен, выводим сообщение "сенсор не обнаружен" и входим в бесконечный цикл: while(1)
все же написано :D

Отправлено спустя 3 минуты 46 секунд:
Ivan_Kornege,
зря делаеш в модуле строки, это лишняя работа и усложнение модуля
делай какой выход булевый и его вешай на индикатор, в индикаторе не забудь указать строку и столбец для надписей, чтобы они друг друга не перекрывали
Вложения
fl.png
fl.png (9.72 КБ) 1547 просмотров

Аватара пользователя
Ivan_Kornege
Лейтенант
Сообщения: 342
Зарегистрирован: 29.04.2017{, 08:24}
Репутация: 27
Откуда: гАндурас
Имя: Ivan

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

#9

Сообщение Ivan_Kornege » 01.09.2018{, 21:24}

kalobyte, именно так и работает скейтч. Но код который делается в ФЛПРОГ не работает.

Отправлено спустя 18 минут 3 секунды:
kalobyte писал(а):
01.09.2018{, 21:22}
зря делаеш в модуле строки, это лишняя работа и усложнение модуля
делай какой выход булевый
Fingerprint_scan_true_V_0.JPG
Fingerprint_scan_true_V_0.JPG (12.16 КБ) 1542 просмотра
именно так и будет блок в конечном варианте, сейчас строки вывожу что бы визуально отобразить на дисплее в период отстройки

kalobyte
Лейтенант
Сообщения: 422
Зарегистрирован: 22.10.2016{, 14:22}
Репутация: 28

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

#10

Сообщение kalobyte » 01.09.2018{, 22:43}

Ivan_Kornege писал(а):
01.09.2018{, 21:42}
сейчас строки вывожу что бы визуально отобразить на дисплее в период отстройки
неправильно делаеш
отстраивают сначала в коде, там можно добавлять вывод в консоль
как заработает в коде, то можно переносить в блок 100% работающий код

ну и я бы не использовал софтовый юарт, есть же железный

Аватара пользователя
AVGN
Капитан
Сообщения: 727
Зарегистрирован: 03.02.2017{, 12:23}
Репутация: 56

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

#11

Сообщение AVGN » 02.09.2018{, 10:08}

Ivan_Kornege писал(а):
01.09.2018{, 21:13}
Вот этот код работает:

Код: Выделить всё

    #include <SoftwareSerial.h>
    #include <LiquidCrystal.h>
    #include <Adafruit_Fingerprint.h>
    LiquidCrystal _lcd1(8, 9, 4, 5, 6, 7);
    int _dispTempLength1=0;
    boolean _isNeedClearDisp1;
     
    bool ScanS;
    String ScanS_txt;
    bool FoundS;
    String FoundS_txt;
    String PleaseFinger;
    bool NotfoundS;
    String NotfoundS_txt;
    byte N_ID;
    //SoftwareSerial mySerial(2, 3); // объявляем объект mySerial для работы с библиотекой SoftwareSerial ИМЯ_ОБЪЕКТА( RX, TX ); // Можно указывать любые выводы, поддерживающие прерывание PCINTx
    SoftwareSerial mySerial( 2, 3); // объявляем объект mySerial для работы с библиотекой SoftwareSerial ИМЯ_ОБЪЕКТА( RX, TX ); // Можно указывать любые выводы, поддерживающие прерывание PCINTx
    Adafruit_Fingerprint finger= Adafruit_Fingerprint(&mySerial); // объявляем объект finger   для работы с библиотекой Adafruit_Fingerprint ИМЯ_ОБЪЕКТА = Adafruit_Fingerprint(ПАРАМЕТР);   
    // ПАРАМЕТР - ссылка на объект для работы с UART к которому подключен модуль, например: &Serial1
    int _disp1oldLength = 0;
    int _disp3oldLength = 0;
    
    void setup()
    {
    pinMode(13, OUTPUT);
     
    _lcd1.begin(16, 2);
     
    _lcd1.clear();                                                             // стираем информацию с дисплея
    _lcd1.setCursor(0, 0);  _lcd1.print("iArduino.ru");                        // выводим текст "iArduino.ru"
      delay(500);                                                              // обязательная задержка перед инициализацией модуля отпечатков пальцев
      finger.begin(57600);                                                     // инициируем модуль отпечатков пальцев, с подключением через программный UART на скорости 57600 (скорость модуля по умолчанию)
      _lcd1.clear();                                                           // стираем информацию с дисплея
      _lcd1.setCursor(0, 0);        _lcd1.print(F("Scan sensor..."));          // выводим текст "Scan sensor..."
      _lcd1.setCursor(0, 1);                                                   // устанавливаем курсор в позицию: 0 столбец, 1 строка
      if(finger.verifyPassword()){_lcd1.print("Found sensor");}                // если модуль отпечатков    обнаружен, выводим сообщение "сенсор обнаружен"
      else                       {_lcd1.print("Sensor not found"); while(1);}  // если модуль отпечатков не обнаружен, выводим сообщение "сенсор не обнаружен" и входим в бесконечный цикл: while(1);
      delay(1000);                                                             // необязательная задержка, чтоб можно было прочитать сообщение об обнаружении модуля
    }
     
     
    void loop() {
      // put your main code here, to run repeatedly:
     
    }
В этом коде while(1); тоже while(true). Т.е. своего рода так делается loop до тех пор пока ,как Andy написал: " пока функция finger.verifyPassword() не вернула 1".
В данном случае LCD находится в функции void setup() до while(1) и поэтому выводится информация на LCD.
А функция void loop() не начнет выполнятся, пока " пока функция finger.verifyPassword() не вернула 1".
Ivan_Kornege писал(а):
01.09.2018{, 21:13}
А когда я делаю блок и в флпрог получется такой код, то перестает работать:

Код: Выделить всё

#include <SoftwareSerial.h>
#include <LiquidCrystal.h>
#include <Adafruit_Fingerprint.h>
LiquidCrystal _lcd1(8, 9, 4, 5, 6, 7);
int _dispTempLength1=0;
boolean _isNeedClearDisp1;
 
bool ScanS;
String ScanS_txt;
bool FoundS;
String FoundS_txt;
bool NotfoundS;
String NotfoundS_txt;
String PleaseFinger;
byte N_ID;
//SoftwareSerial mySerial(2, 3); // объявляем объект mySerial для работы с библиотекой SoftwareSerial ИМЯ_ОБЪЕКТА( RX, TX ); // Можно указывать любые выводы, поддерживающие прерывание PCINTx
SoftwareSerial mySerial( 2, 3); // объявляем объект mySerial для работы с библиотекой SoftwareSerial ИМЯ_ОБЪЕКТА( RX, TX ); // Можно указывать любые выводы, поддерживающие прерывание PCINTx
Adafruit_Fingerprint finger= Adafruit_Fingerprint(&mySerial); // объявляем объект finger   для работы с библиотекой Adafruit_Fingerprint ИМЯ_ОБЪЕКТА = Adafruit_Fingerprint(ПАРАМЕТР);   
// ПАРАМЕТР - ссылка на объект для работы с UART к которому подключен модуль, например: &Serial1
int _disp1oldLength = 0;
int _disp2oldLength = 0;
int _disp3oldLength = 0;
void setup()
{
pinMode(13, OUTPUT);
 
_lcd1.begin(16, 2);
 
  delay(500);                                                              // обязательная задержка 0,5 сек перед инициализацией модуля отпечатков пальцев
  finger.begin(57600);                                                     // инициируем модуль отпечатков пальцев, с подключением через программный UART на скорости 57600 (скорость модуля по умолчанию)
 
ScanS = true;                                                                                   // пока идет поиск сенсора присутствует true
 ScanS_txt  = ("Scan sensor...") ;                                                  // Вывод сообщения "Поиск сенсора" в виде String
 
if(finger.verifyPassword())
 {
   FoundS = true;                                                                          // Если модуль отпечатков обнаружен появится уровень true   
   FoundS_txt = (String("Found sensor!")) ;                                         // Если модуль отпечатков обнаружен, выводим сообщение "сенсор обнаружен" ввиде String   
  }
  else                       
  {
    FoundS = false;                                                                          // Если модуль отпечатков не обнаружен на выходе FoundS появится уровень false
    NotfoundS = true;                                                                     // Если модуль отпечатков не обнаружен появится уровень true  
    NotfoundS_txt = ("Sensor not found");                                           // если модуль отпечатков не обнаружен, выводим сообщение "сенсор не обнаружен"
while(1);                                                                                      // если модуль отпечатков не обнаружен, выводим сообщение "сенсор не обнаружен" и входим в бесконечный цикл: while(1);
}                           
 
 delay(1000);                                                             // необязательная задержка, чтоб можно было прочитать сообщение об обнаружении модуля
 
}
 
 
void loop()
{if (_isNeedClearDisp1) {_lcd1.clear(); _isNeedClearDisp1= 0;}
 
 
 
 
 
//Плата:1
 
 
if (NotfoundS) {
_dispTempLength1 = ((NotfoundS_txt)).length();
if (_disp1oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;} 
_disp1oldLength = _dispTempLength1;
_lcd1.setCursor(0, 1);
_lcd1.print((NotfoundS_txt));
} else {
if (_disp1oldLength > 0) {_isNeedClearDisp1 = 1; _disp1oldLength = 0;} 
}
if (FoundS) {
_dispTempLength1 = ((FoundS_txt)).length();
if (_disp2oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;} 
_disp2oldLength = _dispTempLength1;
_lcd1.setCursor(0, 0);
_lcd1.print((FoundS_txt));
} else {
if (_disp2oldLength > 0) {_isNeedClearDisp1 = 1; _disp2oldLength = 0;} 
}
digitalWrite(13, ScanS);
if (ScanS) {
_dispTempLength1 = ((ScanS_txt)).length();
if (_disp3oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;} 
_disp3oldLength = _dispTempLength1;
_lcd1.setCursor(0, 0);
_lcd1.print((ScanS_txt));
} else {
if (_disp3oldLength > 0) {_isNeedClearDisp1 = 1; _disp3oldLength = 0;} 
}
}
FlProg не ставит код штатных блоков LCD в функцию void setup(). А заталкивает в void loop().
И соответственно если дактилоскоп не подключен (не найден) , то крутится все что до while(1) , а функция void loop() не исполняется.
Начнет исполнятся void loop() когда дактилоскоп будет определен, тогда и LCD запустится -он же в void loop() находится.

Вот теперь задача - можно ли затолкнуть штатный дисплей в void setup() ?
Я раньше такой возможности не нашел как это можно сделать в FlProg.
Можно конечно сделать блок дисплея код которого, при конвертации, FlProg вставляла в функцию void setup().

Ну как то так теоретически. :smile427:

Отправлено спустя 7 минут 45 секунд:
kalobyte писал(а):
01.09.2018{, 22:43}
неправильно делаеш
отстраивают сначала в коде, там можно добавлять вывод в консоль
как заработает в коде, то можно переносить в блок 100% работающий код
да нечего там отстраивать - производитель дактилоскопа сделал библиотеку и примеры -они рабочие.
Теперь из этого надо перелепить в блок FlProg.
Программа не совсем все делает так как если ручками писать код.
Все правильно Ваня делает -железячники тестируют все в железе. :moil: :yes:

Отправлено спустя 8 минут 2 секунды:
kalobyte писал(а):
01.09.2018{, 22:43}
ну и я бы не использовал софтовый юарт, есть же железный
Просто идет по пути наименьшего сопротивления. Он же делает блок из работающего кода.
Если вы не можете объяснить это просто – значит, вы сами не понимаете этого до конца.
☆Альберт Эйнштейн

kalobyte
Лейтенант
Сообщения: 422
Зарегистрирован: 22.10.2016{, 14:22}
Репутация: 28

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

#12

Сообщение kalobyte » 02.09.2018{, 11:33}

AVGN писал(а):
02.09.2018{, 10:24}
Он же делает блок из работающего кода.
так у него походу датчик нерабочий :D

Аватара пользователя
Ivan_Kornege
Лейтенант
Сообщения: 342
Зарегистрирован: 29.04.2017{, 08:24}
Репутация: 27
Откуда: гАндурас
Имя: Ivan

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

#13

Сообщение Ivan_Kornege » 02.09.2018{, 20:15}

kalobyte писал(а):
02.09.2018{, 11:33}
так у него походу датчик нерабочий :D
сканеры рабочие -загружал все примеры и записал отпечатки и считал все отлично, я в первом посте писал:
Ivan_Kornege писал(а):
01.09.2018{, 19:00}
Протестировал такой скетч, работает:
Отправлено спустя 1 час 10 минут 54 секунды:
AVGN, походу надо делать блок со встроенным дисплеем.

Аватара пользователя
AVGN
Капитан
Сообщения: 727
Зарегистрирован: 03.02.2017{, 12:23}
Репутация: 56

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

#14

Сообщение AVGN » 06.09.2018{, 17:56}

Ivan_Kornege, загрузил сюда
Если вы не можете объяснить это просто – значит, вы сами не понимаете этого до конца.
☆Альберт Эйнштейн

Ответить

Вернуться в «Разработка пользовательских блоков»