2016-09-21 8 views
0

私は現在、私のDIYプロジェクトの1つを行うためにArduinoと仕事をしています。Arduinoのコマンドタイムアウト

現在、私の指紋スキャナ(GT-511C3)は私のArduinoに接続されていて、うまくいきます。私は登録された指紋を確認することができます。

finterprintsのベリファイは(ボタンを押すことにより開始される)ラズベリーパイのコマンドボタンが押されたときに

は論理的に、この手段、ラズベリーPiはアルドゥイーノに「検証」コマンドを送る経由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); 

    } 
    } 
} 

指が置かれ、検証された場合、それはオフになり、別のvalidateコマンドを待っているに戻っ:これは私が試したコードです。

ご協力いただければ幸いです!

答えて

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条件も間違っています。 EAN:

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

お知らせループを再開continueキーワードの使用:に翻訳

if the timeout has expired

。正当なものにするには、if (Serial.available() > 0)while (Serial.available() > 0)に変更してください。

+0

この説明をお寄せいただきありがとうございます。特に、後藤の方が良いと考えられています。つまり、それはタイムアウトだという意味では機能しますが、valを0にリセットしないので、2回目の検証を要求すると直ちにタイムアウトになると思います。これを解決する方法はありますか? – user5740843

+0

@ user5740843 IFブロックを編集しました。今期待通りに動くはずです。 – TisteAndii

+0

@ user5740843問題が解決した場合は、回答を受け入れることを検討してください。 – TisteAndii

関連する問題