My project was to open the door from inside and outside the room using fingerprint sensors, currently I used separate arduino on 2 different fingerprint sensor. Please help, my arduino detected only 1 fingerprint sensor when I try to connect them both on 1 arduino. ps: I connected the fingerprint sensor to digital pins (2,3) and (10,11) of the arduino mega. Thank you in advance...
//Here is my code
//for Relay
int in1 = 8; //pin for opening door
int in2 = 9; //pin for buzzer
#include (<)Adafruit_Fingerprint.h>
//it (<) i use only to post the code
//Arduino Mega
SoftwareSerial mySerial1(2, 3); //for fingeprint sensor outside
SoftwareSerial mySerial2(10, 11);//for fingeprint sensor inside
Adafruit_Fingerprint finger1 = Adafruit_Fingerprint(&mySerial1);
Adafruit_Fingerprint finger2 = Adafruit_Fingerprint(&mySerial2);
void setup()
{
Serial.begin(115200);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
digitalWrite(in1, HIGH);
digitalWrite(in2, HIGH);
while (!Serial);
delay(100);
finger1.begin(57600);
finger2.begin(57600);
if (finger1.verifyPassword() and finger2.verifyPassword()) { //To verify if 2
fingerprint sensor is working
Serial.println("Found fingerprint sensors!");
} else {
Serial.println("Did not find any fingerprint sensor!");
while (1) { delay(1); }
}
finger1.getTemplateCount(); //To show the numbers of enrolled fingerprint in sensor
finger2.getTemplateCount();
Serial.print("Fingerprint Sensor1 contains ");
Serial.print(finger1.templateCount); Serial.println(" templates");
Serial.print("Fingerprint Sensor2 contains ");
Serial.print(finger2.templateCount); Serial.println(" templates");
Serial.println("Waiting for valid finger...");
}
void loop()
{
//for fingeprint sensor outside the door
getFingerprintID1();
delay(50);
//for fingeprint sensor inside the door
getFingerprintID2();
delay(50);
}
uint8_t getFingerprintID1() {
uint8_t p = finger1.getImage();
switch (p) {
case FINGERPRINT_OK:
//Serial.println("Image taken");
break;
case FINGERPRINT_NOFINGER:
// Serial.println("No finger detected");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
// Serial.println("Communication error");
return p;
case FINGERPRINT_IMAGEFAIL:
//Serial.println("Imaging error");
return p;
default:
//Serial.println("Unknown error");
return p;
}
// OK success!
p = finger1.image2Tz();
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 = finger1.fingerFastSearch();
if (p == FINGERPRINT_OK) {
Serial.println("Found a print match!");
digitalWrite(in1, LOW); //Door will open for 5 seconds
delay(5000);
digitalWrite(in1, HIGH);
delay(1000);
Serial.print(finger1.fingerID);
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
//Serial.println("Communication error");
return p;
} else if (p == FINGERPRINT_NOTFOUND) {
Serial.println("Did not find a match");
digitalWrite(in2,LOW); //if the fingerprint did not recognize buzzer will be ON
delay(1000);
digitalWrite(in2,HIGH);
return p;
} else {
//Serial.println("Unknown error");
return p;
}
return finger1.fingerID;
}
uint8_t getFingerprintID2() {
uint8_t p = finger2.getImage();
switch (p) {
case FINGERPRINT_OK:
//Serial.println("Image taken");
break;
case FINGERPRINT_NOFINGER:
// Serial.println("No finger detected");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
// Serial.println("Communication error");
return p;
case FINGERPRINT_IMAGEFAIL:
//Serial.println("Imaging error");
return p;
default:
//Serial.println("Unknown error");
return p;
}
// OK success!
p = finger2.image2Tz();
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 = finger2.fingerFastSearch();
if (p == FINGERPRINT_OK) {
Serial.println("Found a print match!");
digitalWrite(in1, LOW);
delay(3000);
digitalWrite(in1, HIGH);
delay(1000);
Serial.print(finger2.fingerID);
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
//Serial.println("Communication error");
return p;
} else if (p == FINGERPRINT_NOTFOUND) {
Serial.println("Did not find a match");
digitalWrite(in2,LOW);
delay(1000);
digitalWrite(in2,HIGH);
return p;
} else {
//Serial.println("Unknown error");
return p;
}
return finger2.fingerID;
}
1 Answer 1
I guess your problem is, that you are using SoftwareSerial. Doing Serial in software means, that you can only listen at one interface at a time, thus only one of the fingerprint sensors work at a time.
But you are using the Arduino Mega, which has 4 hardware Serial interfaces. They are named Serial
and SerialX
(with X being 1,2 or 3). You can give a reference to these Serial interfaces to the Adafruit library just like you are doing it with the SoftwareSerial interfaces. You are doing:
Adafruit_Fingerprint finger1 = Adafruit_Fingerprint(&mySerial1);
Instead you could do:
Adafruit_Fingerprint finger1 = Adafruit_Fingerprint(&Serial1);
That will give a reference of the second hardware serial interface (first whould be Serial
) to the Adafruit library, which will then use it to communicate with the sensor. Hardware and Software Serial implement the same interface, they just work differently under the hood, so you can easily exchange them at this level.
-
For Hardware Serial you cannot define your own pins. You have to use the pins corresponding to the used interface. For
Serial1
this is pin 19 (RX) and pin 18 (TX)chrisl– chrisl2019年11月26日 10:10:29 +00:00Commented Nov 26, 2019 at 10:10 -
Thank you!!! now I know how to use hardware serial on arduino mega :)))Time Gold– Time Gold2019年11月26日 10:11:52 +00:00Commented Nov 26, 2019 at 10:11
-
{}
button or pressing Control+K.