Ciao a tutti, sto sviluppando un progetto che permette di far muovere un servo motore dopo la lettura dell'impronta digitale tramite il sensore GT511 il quale ha già delle librerie per arduino oltre ad avere un software con interfaccia grafica che permette di memorizzare delle impronte nel lettore.
Sono riuscito a memorizzare delle impronte utilizzando un software scritto in arduino ed a far muovere il motore con un altro; il problema è che adesso vorrei unire le due cose, cioe vorrei che funzionasse solo la parte della registrazione di impronte quando l'arduino è collegato al pc tramite usb e che funzionasse solo la parte di movimento servo quando questo è alimentato solo con pila. Ho visto che si potrebbe usare in "if(Serial)" per implementare ciò ma sto trovando qualche difficoltà. Qualcuno saprebbe aiutarmi?
Il SW grafico per memorizzare le impronte lo ho trovato qui: GT-511C3 Fingerprint Scanner SDK Demo using Arduino Uno
Parte della memorizzazione di impronte:
#include <SoftwareSerial.h>
// need a serial port to communicate with the GT-511C3
SoftwareSerial gtSerial(8, 7); // Arduino RX (GT TX), Arduino TX (GT RX)
// the Arduino TX pin needs a voltage divider, see wiring diagram at:
// http://startingelectronics.com/articles/GT-511C3-fingerprint-scanner-hardware/
void setup() {
Serial.begin(9600); // serial connection to processing app.
gtSerial.begin(9600); // for communicating with the GT-511C3
}
byte rx_byte = 0; // stores received byte
void loop() {
if (Serial.available()) {
// get byte from processing app. and send to FPS
rx_byte = Serial.read();
gtSerial.write(rx_byte);
}
// check for a byte from the GT-511C3
if (gtSerial.available()) {
// get a byte from the FPS and send it to the processing app.
rx_byte = gtSerial.read();
Serial.write(rx_byte);
}
}
Parte del movimento servo:
#include "FPS_GT511C3.h"
#include "SoftwareSerial.h" // usata dalla FPS_GT511C3.h
#include "Arduino.h"
#include "Servo.h"
Servo myservo; // create servo object to control a servo
int pos = 0; // variable to store the servo position
FPS_GT511C3 fps(8, 7);
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
delay(100);
fps.Open();
fps.SetLED(true);
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop()
{
delay (700);
// put your main code here, to run repeatedly:
if((fps.IsPressFinger()) == true)
{
fps.CaptureFinger (true); // cattura l’impronta del dito sul sensore e la memorizza nella memoria del sensore stesso. Andrà poi confrontata con il DB per individuare l’id. Restituisce true se la cattura ha successo, false se il sensore è vuoto.
if (fps.Verify1_1(0) == 0 || fps.Verify1_1(1) == 0 || fps.Verify1_1(2)== 0 || fps.Verify1_1(3)== 0 || fps.Verify1_1(4)== 0 || fps.Verify1_1(5)== 0 || fps.Verify1_1(6)== 0 || fps.Verify1_1(7)== 0 || fps.Verify1_1(8)== 0 || fps.Verify1_1(9)== 0 || fps.Verify1_1(10)== 0 || fps.Verify1_1(11)== 0 || fps.Verify1_1(12)== 0 || fps.Verify1_1(13)== 0 || fps.Verify1_1(14)== 0 || fps.Verify1_1(15)== 0 || fps.Verify1_1(16)== 0 || fps.Verify1_1(17)== 0 || fps.Verify1_1(18)== 0 || fps.Verify1_1(19)== 0)
// int Verify1_1(int id): verifica se l’impronta catturata con la funzione CaptureFinger corrisponde all’impronta memorizzata nello slot identificato da id (da 0 a 199). Ritorna: 0 se corrispondono, 1 se la posizione non è valida (id < 0 o id > 199), 2 se l’id non in uso (vuoto), 3 se l’impronta non corrisponde a quella nello slot id
{
pos =0;
myservo.write(pos); // motore in posizione 0 gradi
delay (2500);
}
pos =75;
myservo.write(pos); // motore in posizione 75 gradi
delay (800);
}
}