-
Notifications
You must be signed in to change notification settings - Fork 54
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #23 from jerryneedell/jerryn_led
Add LED control for R503 Sensor
- Loading branch information
Showing
4 changed files
with
503 additions
and
12 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,211 @@ | ||
import time | ||
import board | ||
import busio | ||
import adafruit_fingerprint | ||
|
||
uart = busio.UART(board.TX, board.RX, baudrate=57600) | ||
|
||
# If using with a computer such as Linux/RaspberryPi, Mac, Windows with USB/serial converter: | ||
# import serial | ||
# uart = serial.Serial("/dev/ttyUSB0", baudrate=57600, timeout=1) | ||
|
||
# If using with Linux/Raspberry Pi and hardware UART: | ||
# import serial | ||
# uart = serial.Serial("/dev/ttyS0", baudrate=57600, timeout=1) | ||
|
||
finger = adafruit_fingerprint.Adafruit_Fingerprint(uart) | ||
|
||
################################################## | ||
|
||
|
||
def get_fingerprint(): | ||
"""Get a finger print image, template it, and see if it matches!""" | ||
print("Waiting for image...") | ||
while finger.get_image() != adafruit_fingerprint.OK: | ||
pass | ||
print("Templating...") | ||
if finger.image_2_tz(1) != adafruit_fingerprint.OK: | ||
return False | ||
print("Searching...") | ||
if finger.finger_search() != adafruit_fingerprint.OK: | ||
return False | ||
return True | ||
|
||
|
||
# pylint: disable=too-many-branches | ||
def get_fingerprint_detail(): | ||
"""Get a finger print image, template it, and see if it matches! | ||
This time, print out each error instead of just returning on failure""" | ||
print("Getting image...", end="", flush=True) | ||
i = finger.get_image() | ||
if i == adafruit_fingerprint.OK: | ||
print("Image taken") | ||
else: | ||
if i == adafruit_fingerprint.NOFINGER: | ||
print("No finger detected") | ||
elif i == adafruit_fingerprint.IMAGEFAIL: | ||
print("Imaging error") | ||
else: | ||
print("Other error") | ||
return False | ||
|
||
print("Templating...", end="", flush=True) | ||
i = finger.image_2_tz(1) | ||
if i == adafruit_fingerprint.OK: | ||
print("Templated") | ||
else: | ||
if i == adafruit_fingerprint.IMAGEMESS: | ||
print("Image too messy") | ||
elif i == adafruit_fingerprint.FEATUREFAIL: | ||
print("Could not identify features") | ||
elif i == adafruit_fingerprint.INVALIDIMAGE: | ||
print("Image invalid") | ||
else: | ||
print("Other error") | ||
return False | ||
|
||
print("Searching...", end="", flush=True) | ||
i = finger.finger_fast_search() | ||
# pylint: disable=no-else-return | ||
# This block needs to be refactored when it can be tested. | ||
if i == adafruit_fingerprint.OK: | ||
print("Found fingerprint!") | ||
return True | ||
else: | ||
if i == adafruit_fingerprint.NOTFOUND: | ||
print("No match found") | ||
else: | ||
print("Other error") | ||
return False | ||
|
||
|
||
# pylint: disable=too-many-statements | ||
def enroll_finger(location): | ||
"""Take a 2 finger images and template it, then store in 'location'""" | ||
for fingerimg in range(1, 3): | ||
if fingerimg == 1: | ||
print("Place finger on sensor...", end="", flush=True) | ||
else: | ||
print("Place same finger again...", end="", flush=True) | ||
|
||
while True: | ||
i = finger.get_image() | ||
if i == adafruit_fingerprint.OK: | ||
print("Image taken") | ||
break | ||
if i == adafruit_fingerprint.NOFINGER: | ||
print(".", end="", flush=True) | ||
elif i == adafruit_fingerprint.IMAGEFAIL: | ||
print("Imaging error") | ||
return False | ||
else: | ||
print("Other error") | ||
return False | ||
|
||
print("Templating...", end="", flush=True) | ||
i = finger.image_2_tz(fingerimg) | ||
if i == adafruit_fingerprint.OK: | ||
print("Templated") | ||
else: | ||
if i == adafruit_fingerprint.IMAGEMESS: | ||
print("Image too messy") | ||
elif i == adafruit_fingerprint.FEATUREFAIL: | ||
print("Could not identify features") | ||
elif i == adafruit_fingerprint.INVALIDIMAGE: | ||
print("Image invalid") | ||
else: | ||
print("Other error") | ||
return False | ||
|
||
if fingerimg == 1: | ||
print("Remove finger") | ||
time.sleep(1) | ||
while i != adafruit_fingerprint.NOFINGER: | ||
i = finger.get_image() | ||
|
||
print("Creating model...", end="", flush=True) | ||
i = finger.create_model() | ||
if i == adafruit_fingerprint.OK: | ||
print("Created") | ||
else: | ||
if i == adafruit_fingerprint.ENROLLMISMATCH: | ||
print("Prints did not match") | ||
else: | ||
print("Other error") | ||
return False | ||
|
||
print("Storing model #%d..." % location, end="", flush=True) | ||
i = finger.store_model(location) | ||
if i == adafruit_fingerprint.OK: | ||
print("Stored") | ||
else: | ||
if i == adafruit_fingerprint.BADLOCATION: | ||
print("Bad storage location") | ||
elif i == adafruit_fingerprint.FLASHERR: | ||
print("Flash storage error") | ||
else: | ||
print("Other error") | ||
return False | ||
|
||
return True | ||
|
||
|
||
################################################## | ||
|
||
|
||
def get_num(): | ||
"""Use input() to get a valid number from 1 to 127. Retry till success!""" | ||
i = 0 | ||
while (i > 127) or (i < 1): | ||
try: | ||
i = int(input("Enter ID # from 1-127: ")) | ||
except ValueError: | ||
pass | ||
return i | ||
|
||
|
||
# initialize LED color | ||
led_color = 1 | ||
led_mode = 3 | ||
while True: | ||
# Turn on LED | ||
finger.set_led(color=led_color, mode=led_mode) | ||
print("----------------") | ||
if finger.read_templates() != adafruit_fingerprint.OK: | ||
raise RuntimeError("Failed to read templates") | ||
print("Fingerprint templates:", finger.templates) | ||
print("e) enroll print") | ||
print("f) find print") | ||
print("d) delete print") | ||
print("l) set LED") | ||
print("----------------") | ||
c = input("> ") | ||
|
||
if c == "l": | ||
c = input("color(r,b,p anything else=off)> ") | ||
led_mode = 3 | ||
if c == "r": | ||
led_color = 1 | ||
elif c == "b": | ||
led_color = 2 | ||
elif c == "p": | ||
led_color = 3 | ||
else: | ||
led_color = 1 | ||
led_mode = 4 | ||
elif c == "e": | ||
enroll_finger(get_num()) | ||
elif c == "f": | ||
# breathing LED | ||
finger.set_led(color=3, mode=1) | ||
if get_fingerprint(): | ||
print("Detected #", finger.finger_id, "with confidence", finger.confidence) | ||
else: | ||
print("Finger not found") | ||
elif c == "d": | ||
if finger.delete_model(get_num()) == adafruit_fingerprint.OK: | ||
print("Deleted!") | ||
else: | ||
print("Failed to delete") | ||
else: | ||
print("Invalid choice: Try again") |
Oops, something went wrong.