2016-09-21 178 views
0

我目前正在使用Arduino來補充我的一個DIY項目。目前,我的指紋掃描器(GT-511C3)連接到我的Arduino,效果很好。我能夠驗證登記的指紋。Arduino命令暫停

的finterprints的驗證通過樹莓裨命令(其中通過按下一個按鈕啓動)

在邏輯上,這意味着,當按下按鈕時,樹莓裨發送「驗證」命令到Arduino happends ,他們要求指紋掃描儀運行驗證命令。

但是,我想在它發送的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); 

    } 
    } 
} 

的代碼,否則工作正常,如果手指被放置和驗證,它會關閉並返回以等待另一驗證命令。

任何幫助將不勝感激!

回答

1

首先,擺脫標籤和goto。這裏沒有理由;這被認爲是不好的編程習慣,除非你確切知道你在做什麼,否則不應該被使用。只有在Assembly中,可以自由使用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條件也是錯誤的,應該m EAN:

if the timeout has expired

翻譯成:

if(val >= 150){ 
    fps.SetLED(false); 
    val = 0; 
    continue; 
} 

通知使用continue關鍵字其中重新開始循環。要使其合法,請將if (Serial.available() > 0)更改爲while (Serial.available() > 0)

+0

謝謝你的解釋,特別是哪個更好,並且擺脫goto。話雖如此,它的工作原理是超時,但我相信它不會將val重置爲0,因此當我請求第二次驗證時,它立即超時。有什麼辦法可以解決這個問題嗎? – user5740843

+0

@ user5740843我編輯了IF塊。現在應該按預期工作。 – TisteAndii

+0

@ user5740843如果它解決了您的問題,請考慮接受答案。 – TisteAndii