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

Создаем свой блок. Вопросы, помощь знатоков.
Ответить
Аватара пользователя
Ivan_Kornege
Лейтенант
Сообщения: 338
Зарегистрирован: 29 апр 2017, 08:24
Откуда: гАндурас
Имя: Ivan

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

Сообщение Ivan_Kornege »

Модули отпечатков пальцев 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
Что то не получается.
Если в коде закомментировать " while(1);" тогда при отключенном сканере выводится "ScanS" уровнь 1, а с выхода "Scan_txt" текстовое сообщение.
Если раскомментировать " while(1);" перестает выводить .

Гуру подскажите или поправьте блок плиз.
Скачать проект с блоком отсюда
У вас нет необходимых прав для просмотра вложений в этом сообщении.
kalobyte
Лейтенант
Сообщения: 422
Зарегистрирован: 22 окт 2016, 14:22

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

Сообщение kalobyte »

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

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

этот кусок должен постоянно выполняться в секции луп
ну и у тебя нет куска кода, который отвечает за запись отпечатка
или он там заливается в сам сканер каким-то софтом заранее?
Аватара пользователя
Ivan_Kornege
Лейтенант
Сообщения: 338
Зарегистрирован: 29 апр 2017, 08:24
Откуда: гАндурас
Имя: Ivan

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

Сообщение Ivan_Kornege »

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

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

Отправлено спустя 15 минут 19 секунд:
while(1); вообще убрать?
kalobyte
Лейтенант
Сообщения: 422
Зарегистрирован: 22 окт 2016, 14:22

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

Сообщение kalobyte »

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

скетч отсюда
https://wiki.iarduino.ru/page/skaner-ot ... ov-palcev/
его писал какой-то поехавший
Аватара пользователя
Ivan_Kornege
Лейтенант
Сообщения: 338
Зарегистрирован: 29 апр 2017, 08:24
Откуда: гАндурас
Имя: Ivan

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

Сообщение Ivan_Kornege »

kalobyte писал(а): 01 сен 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

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

Сообщение Anydy »

Не изучал, но насколько я понимаю в сетапе пока функция finger.verifyPassword() не вернула 1, то все ...программа стопориться
Аватара пользователя
Ivan_Kornege
Лейтенант
Сообщения: 338
Зарегистрирован: 29 апр 2017, 08:24
Откуда: гАндурас
Имя: Ivan

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

Сообщение Ivan_Kornege »

[ref=#aa0000]Anydy[/ref],
Вот этот код работает:

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

    #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 окт 2016, 14:22

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

Сообщение kalobyte »

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

Отправлено спустя 3 минуты 46 секунд:
[ref]Ivan_Kornege[/ref],
зря делаеш в модуле строки, это лишняя работа и усложнение модуля
делай какой выход булевый и его вешай на индикатор, в индикаторе не забудь указать строку и столбец для надписей, чтобы они друг друга не перекрывали
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Ivan_Kornege
Лейтенант
Сообщения: 338
Зарегистрирован: 29 апр 2017, 08:24
Откуда: гАндурас
Имя: Ivan

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

Сообщение Ivan_Kornege »

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

Отправлено спустя 18 минут 3 секунды:
kalobyte писал(а): 01 сен 2018, 21:22зря делаеш в модуле строки, это лишняя работа и усложнение модуля
делай какой выход булевый
Fingerprint_scan_true_V_0.JPG
именно так и будет блок в конечном варианте, сейчас строки вывожу что бы визуально отобразить на дисплее в период отстройки
У вас нет необходимых прав для просмотра вложений в этом сообщении.
kalobyte
Лейтенант
Сообщения: 422
Зарегистрирован: 22 окт 2016, 14:22

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

Сообщение kalobyte »

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

ну и я бы не использовал софтовый юарт, есть же железный
Аватара пользователя
AVGN
Капитан
Сообщения: 727
Зарегистрирован: 03 фев 2017, 12:23

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

Сообщение AVGN »

Ivan_Kornege писал(а): 01 сен 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 сен 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 сен 2018, 22:43неправильно делаеш
отстраивают сначала в коде, там можно добавлять вывод в консоль
как заработает в коде, то можно переносить в блок 100% работающий код
да нечего там отстраивать - производитель дактилоскопа сделал библиотеку и примеры -они рабочие.
Теперь из этого надо перелепить в блок FlProg.
Программа не совсем все делает так как если ручками писать код.
Все правильно Ваня делает -железячники тестируют все в железе. :moil: :yes:

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

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

Сообщение kalobyte »

AVGN писал(а): 02 сен 2018, 10:24Он же делает блок из работающего кода.
так у него походу датчик нерабочий :D
Аватара пользователя
Ivan_Kornege
Лейтенант
Сообщения: 338
Зарегистрирован: 29 апр 2017, 08:24
Откуда: гАндурас
Имя: Ivan

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

Сообщение Ivan_Kornege »

kalobyte писал(а): 02 сен 2018, 11:33так у него походу датчик нерабочий :D
сканеры рабочие -загружал все примеры и записал отпечатки и считал все отлично, я в первом посте писал:
Ivan_Kornege писал(а): 01 сен 2018, 19:00Протестировал такой скетч, работает:
Отправлено спустя 1 час 10 минут 54 секунды:
[ref]AVGN[/ref], походу надо делать блок со встроенным дисплеем.
Аватара пользователя
AVGN
Капитан
Сообщения: 727
Зарегистрирован: 03 фев 2017, 12:23

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

Сообщение AVGN »

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

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

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя