Arduino 'time-out' - Funktion mit einem timer-millis

Habe ich nicht die Programmierung für lange, und ich möchte nur erweitern von electronic engineering mit einem Arduino UNO board.

Habe ich begonnen ein neues Projekt basierend auf der Secret Knock Detecting Door Lock von Steve Hoefer auf Grathio und ich möchte die Umsetzung der folgenden:

(http://grathio.com/2009/11/secret_knock_detecting_door_lock/)
(http://grathio.com/assets/secret_knock_detector.pde)

Implementierung

Wenn der Globale Wert gleich 0 und der gültige knock-Sprüche wahr ist, dann blinkt eine gelbe LED 4 mal mit millis statt delay so, dass es immer noch 'hören'.

Wenn andere gültige knock-Muster ist nicht zu hören, die innerhalb von 6 Sekunden wird die Zeit aus und reset global auf 0, so dass es kann bestätigen, die ersten Muster und blinkt die gelbe LED.

Wenn andere gültige knock-Muster gehört wird innerhalb von 6 Sekunden, Inkrementieren eines Zählers.

Wenn der Zähler gleich 1 ist, warten Sie, bis eine andere gültige knock-Muster und wenn Sie wahr Sie innerhalb von 6 Sekunden, erhöht sich der Zähler wieder und nicht blinkt die gelbe LED.

Ansonsten Zeit und setzen Sie alle Werte.

Und so weiter, bis, wenn der Zähler größer als oder gleich 4 trigger-master-LED-array.

Einmal bekommt 4 erfolgreiche klopft, möchte ich es zum auslösen der master-LED-array habe ich gebaut.

Probleme

Dieses Projekt wurde inspiriert durch die test-panels verwendet, die auf Passagier-Flugzeuge. Ich habe gesehen, wie Sie eine Menge, und dachte, es wäre ein guter Ort, um zu starten und lernen, über das timing.

Gibt es ein paar Probleme, da ich nicht zurücksetzen möchten, millis() und jedes mal bin ich über einen button anstatt den booleschen innerhalb der knock-detection-Skript, damit ich nicht verloren im code.

Verstehe ich das nicht reagieren, 50 Sekunden später und es ist ein Anfänger-Fehler, sondern beweist, was ich habe, wenn ich die Taste gedrückt halten. Der code unten auch nicht haben, ein time-out nach dem 1. digitalRead HIGH oder true boolean (ich bin mit diesen zu kämpfen).

Arduino-sketch

  int inPin = 2;         //input pin switch
    int outPin = 3;       //output pin LED

    long currentTime = 0; //counter
    long nextTime = 0; //counter
    long lastTime = 0; //counter

    int patternCounter = 0; //build up 
    int globalValue = 0; //lock out
    int breakIn = 0; //waste of time?

    void setup()
    {
      pinMode(inPin, INPUT);
      pinMode(outPin, OUTPUT);
      Serial.begin(9600);
      Serial.println("GO");
    }

    void loop(){

      //boolean true, switch just for testing
      if (digitalRead(inPin)==HIGH&&globalValue==0&&breakIn==0) { 
        Serial.println("CLEARED 1st");
        delay (500); //flood protection
        globalValue++;
        breakIn++;
        if (globalValue>0&&breakIn>0){ 
          currentTime = millis(); //start a 'new' counter and 'listen'
          if (currentTime<6000) { //less than
            if (digitalRead(inPin)==HIGH) { //and true
              Serial.println("CLEARED 2nd"); //cleared the stage
              delay (500); //flood protection 
              patternCounter++;
            } //if counter less
          } //if true or high
          if (currentTime>6000) {
            Serial.println("TIMEOUT waiting 2nd"); //timed out
            globalValue = 0;
            patternCounter = 0;
            breakIn = 0;
          } //if more than
        } //global master
      }

      //3rd attempt
      if (globalValue==1&&patternCounter==1){ //third round
        nextTime = millis(); //start a 'new' counter and 'listen'
        if (nextTime<6000) { //less than
          if (digitalRead(inPin)==HIGH) { //and true
            Serial.println("CLEARED 3rd");
            delay (500); //flood protection
            patternCounter++;
          } //if counter less
        } //if true or high
        if (nextTime>6000) {
          Serial.println("TIMEOUT waiting 3rd"); //timed out
          globalValue = 0;
          patternCounter = 0;
        } //if more than
       } //global master

      //4th attempt and latch
      if (globalValue==1&&patternCounter==2){ //last round 
        lastTime = millis(); //start a 'new' counter and 'listen'
        if (lastTime<6000) { //less than
          if (digitalRead(inPin)==HIGH) { //and true
            digitalWrite(outPin, HIGH); //LED on
            Serial.println("CLEARED 4th ARRAY"); //cleared the stage
            delay(500); //flood protection
          } //true or high
        } //counter
        if (lastTime>6000) {
          Serial.println("TIMEOUT waiting 4th"); //timed out
          globalValue = 0;
          patternCounter = 0;
        } //if more than
       } //global and alarm


       } //loop end  

Das ist der aktuelle sketch, verstehe ich die Schalter, die ich verwendet habe, sind in der Nähe sinnlos.

Jede Hilfe wäre sehr geschätzt werden!

InformationsquelleAutor user2119971 | 2013-02-28
Schreibe einen Kommentar