Buenas de nuevo, estoy intentando pasar la librería del FPC1020 (lector de huellas dactilar) de SoftwareSerial a HardwareSerial ya que estoy usando un Mega 256 Pro y este cuenta con los mismos puertos series que el Mega normal. El problema que me he encontrado es el mismo que este post FPC1020 Using Arduino pro micro - Programming Questions - Arduino Forum pero no he querido responder en él por ser un poco viejo.
El problema principal viene dado porque la librería crea la clase FPC1020 con funciones y no se porque no me sale substituirla y seguro que es una chorrada.
#include <FPC1020.h>
extern unsigned char l_ucFPID;
extern unsigned char rBuf[192]; //Receive return data
#define swSerial Serial1
//HardwareSerial &swSerial = Serial1;
FPC1020 Finger(&swSerial);
void setup(){
Serial.begin(19200);
Serial1.begin(19200);
pinMode(4, INPUT); // IRQ
Serial.println("Fingerprint Test ! ");
}
void loop(){
unsigned int User_ID = 0;
unsigned char incomingNub;
unsigned int matchUserID = 0;
unsigned char rtf = 0;
while(1){
Serial.println("============== Menu ================");
Serial.println("Add a New User ----------------- 1");
Serial.println("Fingerprint Matching --------------- 2");
Serial.println("Get User Number and Print All User ID ------ 3 ");
Serial.println("Delete Assigned User --------- 4");
Serial.println("Delete All User ---------- 5");
Serial.println("============== End =================");
unsigned char MODE = 0;
while(Serial.available()<=0);
MODE = Serial.read()-0x30;
switch(MODE){
case 0: // Null
break;
case 1: // Fingerprint Input and Add a New User
MODE = 0;
User_ID = 0;
Serial.println("Please input the new user ID (0 ~ 99).");
while(Serial.available()<=0);
delay(100);
incomingNub = Serial.available();
for(char i=incomingNub; i>=1; i--){
User_ID = User_ID + (Serial.read()-0x30)*pow(10,(i-1));
}
Serial.println("Add Fingerprint, please put your finger on the Fingerprint Sensor.");
rtf = Finger.Enroll(User_ID);
if(rtf == TRUE) {
Serial.print("Success, your User ID is: ");
Serial.println( User_ID , DEC);
}
else if (rtf == FALSE) {
Serial.println("Failed, please try again.");
}
else if( rtf == ACK_USER_OCCUPIED){
Serial.println("Failed, this User ID alread exsits.");
}
else if( rtf == ACK_USER_EXIST){
Serial.println("Failed, this fingerprint alread exsits.");
}
delay(2000);
break;
case 2: // Fingerprint Matching
MODE = 0 ;
Serial.println("Match Fingerprint, please put your finger on the Sensor.");
for (int a=0;a<3;a++){
if( Finger.Search()){
Serial.print("Success, your User ID is: ");
Serial.println( l_ucFPID, DEC);
a=3;
}
else {
Serial.println("Failed, please try again.");
}}
delay(1000);
break;
case 3: // Print all user ID
MODE = 0;
if(Finger.PrintUserID()){
Serial.print("Number of Fingerprint User is:");
unsigned char UserNumb;
UserNumb = (l_ucFPID-2)/3;
Serial.println(UserNumb,DEC);
Serial.println("Print all the User ID:");
for(char i = 0; i < UserNumb; i++){
Serial.println(rBuf[12+i*3],DEC);
}
}
else {
Serial.println("Print User ID Fail!");
}
delay(1000);
break;
case 4: // Delete Assigned User ID
MODE = 0;
User_ID = 0;
Serial.println("Please input the user ID(0 ~ 99) you want to delecte.");
while(Serial.available()<=0);
delay(100);
incomingNub = Serial.available();
for(char i=incomingNub; i>=1; i--){
User_ID = User_ID + (Serial.read()-0x30)*pow(10,(i-1));
}
if(Finger.Delete(User_ID)) {
Serial.println("Delete Fingerprint User Success!");
}
else{
Serial.println("Delete Fingerprint User Fail!");
}
delay(1000);
break;
case 5: // Delete All User ID
MODE = 0;
unsigned char DeleteFlag = 0;
Serial.println("Delete All Users, Y/N ?");
for(unsigned char i=200; i>0; i--)//wait response info
{
delay(20);
if(Serial.available()>0)
{
DeleteFlag = Serial.read();
break;
}
}
if(DeleteFlag == 'Y'||'y'){
if(Finger.Clear()){
Serial.println("Delete All Fingerprint User Success!");
}
else{
Serial.println("Delete All Fingerprint User Fail!");
}
}
delay(500);
break;
}
}
}
La clase definida en la librería:
class FPC1020
{
public:
FPC1020(HardwareSerial*ser);
unsigned char Enroll(unsigned int u_id);
unsigned char Clear(void);
unsigned char Delete(unsigned int u_id);
unsigned char Search(void);
unsigned char Read(void);
unsigned char PrintUserID(void);
private:
unsigned char WaitFpData(void);
unsigned char CmdGenCHK(unsigned char wLen,unsigned char *ptr);
void UART_SendPackage(unsigned char wLen,unsigned char *ptr);
unsigned char Check_Package(unsigned char cmd);
void FP_Identify(unsigned int u_id);
void Enroll_Step1(unsigned int u_id);
void Enroll_Step2(unsigned int u_id);
void Enroll_Step3(unsigned int u_id);
};
#define UART_BUF_LEN 8
#define BUF_N 8
unsigned char rBuf[192]; //Receive return data
unsigned char tBuf[UART_BUF_LEN]; //Send commands or data
unsigned char g_ucUartRxEnd ; //Receive return data end flag
unsigned char g_ucUartRxLen ; //Receive return data length
unsigned char l_ucFPID =1; //User ID
HardwareSerial *mySerial = NULL;
FPC1020::FPC1020(HardwareSerial*ser) {
mySerial = ser; // ...override gpsHwSerial with value passed.
mySerial->begin(19200);
}
Los errores que me envía son:
FPC1020.h:37:27: error: expected ')' before '*' token
FPC1020(HardwareSerial*ser);
^
FPC1020.cpp:20:1: error: prototype for 'FPC1020::FPC1020(HardwareSerial*)' does not match any in class 'FPC1020'
FPC1020::FPC1020(HardwareSerial*ser) {
^~~~~~~
FPC1020.h:33:7: error: candidates are: constexpr FPC1020::FPC1020(FPC1020&&)
class FPC1020
^~~~~~~
FPC1020.h:33:7: error: constexpr FPC1020::FPC1020(const FPC1020&)
FPC1020.h:33:7: error: constexpr FPC1020::FPC1020()
Cualquier ayuda será de agradecer