我目前正在与Arduino合作填补我的一个DIY项目。
目前看来,我的指纹扫描仪(GT-511C3)连接到我的Arduino,效果很好。我能够验证登记的指纹。
通过Raspberry Pi命令(由按钮按下启动)验证finterprints的发生情况
逻辑上,这意味着,当按下按钮时,Raspberry Pi会发送一个'验证'对Arduino的命令,反过来要求指纹扫描程序运行验证命令。
但是,我希望在发送的validate命令后超时。超时需要确保如果按下按钮(并且启动了validate命令),但是没有人将他们的手指放在机器上,它会超时并恢复到等待validate命令的状态。
我无法完成此操作。这是我尝试过的代码:
#include "FPS_GT511C3.h"
#include "SoftwareSerial.h"
FPS_GT511C3 fps(4, 5);
int val = 0;
void setup()
{
Serial.begin(9600);
delay(100);
fps.Open();
fps.SetLED(false);
}
void loop(){
if (Serial.available() > 0) {
Continue:
if(Serial.find("validate")){
fps.SetLED(true);
do {
++val;
delay(100);
}
while(fps.IsPressFinger() == false || val > 150);
if(val <= 150){
fps.SetLED(false);
goto Continue;
}
if (fps.IsPressFinger()){
fps.CaptureFinger(false);
int id = fps.Identify1_N();
if (id <200)
{
Serial.print("Verified ID:");
Serial.println(id);
fps.SetLED(false);
}
else
{
Serial.println("Finger not found");
fps.SetLED(false);
}
}
else
{
Serial.println("Please press finger");
}
delay(100);
}
}
}
否则代码工作正常,如果放置并验证了手指,它会关闭并返回等待另一个验证命令。
非常感谢任何帮助!
答案 0 :(得分:1)
首先,摆脱标签和goto
。这里没有任何理由;它被认为是糟糕的编程习惯,除非您确切知道自己在做什么,否则不应该使用它。只有在汇编中才可以自由地使用goto
(相当于JMP)。
接下来,您的while
条件错误。如果你试图解释它,你会发现它没有任何意义:
Wait for as long as nobody has placed a finger or if the timeout has expired.
你可能想要的是:
Wait for as long as nobody has placed a finger and the timeout has not expired.
转换为:
while(fps.IsPressFinger() == false && val < 150);
随后的IF条件也是错误的,应该是:
if the timeout has expired
转换为:
if(val >= 150){
fps.SetLED(false);
val = 0;
continue;
}
请注意使用重新启动循环的continue
关键字。要使其合法化,请将if (Serial.available() > 0)
更改为while (Serial.available() > 0)
。