Go Down

Topic: Hausalarmanlage - Programmfehler (Read 230 times) previous topic - next topic

simon1994

Hallo Leute,

da ich erst seit einigen Wochen mit dem Arduino arbeite komme ich nun an meine Grenzen ::)  

Der Plan war eigentlich eine Hausalermanlage mit Hilfe von dem Arduino MEGA zu programmieren.
Dazu habe ich mir ein kleines Modell aus Holz gebaut (so eine Art kleine Wohnung mit drei Türen).
Der Plan war drei mechanische Kontaktsensoren an die Türen zu bauen um ein Öffnen der Tür zu registrieren.
Bei meinem Aufbau habe ich mich an folgenden Projekt orientiert:

Das Einzige was ich in seinem Programmcode ändern müsste (so dachte ich), wäre ja nur den Ultraschallsensor mit meinen drei Kontaktsensoren zu ersetzen.
Ich habe bereits einen Sketch geschrieben in dem ich nur die drei Sensoren abfrage. Alles funktioniert wie geplant ... der sieht dann so aus:

Code: [Select]


#include <LiquidCrystal.h>

LiquidCrystal lcd(1, 2, 4, 5, 6, 7); // Creates an LC object. Parameters: (rs, enable, d4, d5, d6, d7)

const byte switchPin1 = 46;
const byte switchPin2 = 47;
const byte switchPin3 = 48;
const int buzzer = 49;
const int LedRed = 44;
const int LedGreen = 45;

void setup ()
  
  {
  lcd.begin(16,2);
//  Serial.begin (9600);
  pinMode (switchPin1, INPUT);
  pinMode (switchPin2, INPUT);
  pinMode (switchPin3, INPUT);
  pinMode (buzzer, OUTPUT);
  pinMode (LedRed, OUTPUT);
  pinMode (LedGreen, OUTPUT);
  }

void loop ()
  {
    
  if ((digitalRead (switchPin1) == LOW) && (digitalRead (switchPin2) == LOW) && (digitalRead (switchPin3) == LOW))

     {
     lcd.setCursor(0,0);
     lcd.print("Alle Schalter");
     lcd.setCursor(0,1);
     lcd.print("geschlossen!");
     Serial.println ("Alle Schalter geschlossen!");
     noTone (buzzer);
     digitalWrite(LedGreen,HIGH);
     digitalWrite(LedRed,LOW);
     }


  else if ((digitalRead (switchPin1) == HIGH) && (digitalRead (switchPin2) == LOW) && (digitalRead (switchPin3) == LOW))

    {  
     lcd.clear();  
     lcd.setCursor(0,0);
     lcd.print("Alarm");
     lcd.setCursor(0,1);
     lcd.print("Schalter 1!");
     Serial.println ("Alarm an Schalter 1!");
     tone (buzzer,200);
     digitalWrite(LedGreen,LOW);
     digitalWrite(LedRed,HIGH);
     delay (500);
     digitalWrite(LedRed,LOW);
     delay (500);      
     }
  
  else if ((digitalRead (switchPin1) == LOW) && (digitalRead (switchPin2) == HIGH) && (digitalRead (switchPin3) == LOW))

    {
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Alarm");
     lcd.setCursor(0,1);
     lcd.print("Schalter 2!");
     Serial.println ("Alarm an Schalter 2!");
     tone (buzzer,200);
     digitalWrite(LedGreen,LOW);
     digitalWrite(LedRed,HIGH);
     delay (500);
     digitalWrite(LedRed,LOW);
     delay (500);      
     }

  else if ((digitalRead (switchPin1) == LOW) && (digitalRead (switchPin2) == LOW) && (digitalRead (switchPin3) == HIGH))

    {
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Alarm");
     lcd.setCursor(0,1);
     lcd.print("Schalter 3!");
     Serial.println ("Alarm an Schalter 3!");
     tone (buzzer,200);
     digitalWrite(LedGreen,LOW);
     digitalWrite(LedRed,HIGH);
     delay (500);
     digitalWrite(LedRed,LOW);
     delay (500);      
     }    
  

  else if ((digitalRead (switchPin1) == HIGH) && (digitalRead (switchPin2) == HIGH) && (digitalRead (switchPin3) == LOW))

    {
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Alarm");
     lcd.setCursor(0,1);
     lcd.print("Schalter 1+2!");
     Serial.println ("Alarm an Schalter 1+2!");
     tone (buzzer,200);
     digitalWrite(LedGreen,LOW);
     digitalWrite(LedRed,HIGH);
     delay (500);
     digitalWrite(LedRed,LOW);
     delay (500);    
     }    

  else if ((digitalRead (switchPin1) == LOW) && (digitalRead (switchPin2) == HIGH) && (digitalRead (switchPin3) == HIGH))

    {
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Alarm");
     lcd.setCursor(0,1);
     lcd.print("Schalter 2+3!");
     Serial.println ("Alarm an Schalter 2+3!");
     tone (buzzer,200);
     digitalWrite(LedGreen,LOW);
     digitalWrite(LedRed,HIGH);
     delay (500);
     digitalWrite(LedRed,LOW);
     delay (500);      
     }    

  else if ((digitalRead (switchPin1) == HIGH) && (digitalRead (switchPin2) == LOW) && (digitalRead (switchPin3) == HIGH))

    {
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Alarm");
     lcd.setCursor(0,1);
     lcd.print("Schalter 1+3!");
     Serial.println ("Alarm an Schalter 1+3!");
     tone (buzzer,200);
     digitalWrite(LedGreen,LOW);
     digitalWrite(LedRed,HIGH);
     delay (500);
     digitalWrite(LedRed,LOW);
     delay (500);      
     }

  else if ((digitalRead (switchPin1) == HIGH) && (digitalRead (switchPin2) == HIGH) && (digitalRead (switchPin3) == HIGH))

    {
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Alarm");
     lcd.setCursor(0,1);
     lcd.print("Schalter 1+2+3!");
     Serial.println ("Alarm an Schalter 1+2+3");
     tone (buzzer,200);
     digitalWrite(LedGreen,LOW);
     digitalWrite(LedRed,HIGH);
     delay (500);
     digitalWrite(LedRed,LOW);
     delay (500);      
     }              
 
  }


Da gibt es bestimmt noch Optimierungsbedarf, aber wie gesagt ... Ich bin noch nicht soo lange im Geschäft. :-)


simon1994

Sorry! Hier nochmal der Link:

https://howtomechatronics.com/projects/arduino-security-alarm-system-project/

postmaster-ino

Hi

Ich finde in Deinem Beitrag Nichts, was in die Richtung Frage geht - worin besteht Dein Problem?

MfG

simon1994

So jetzt zu meinem Problem...

Ich habe den Ultraschallsensor rausgeschmissen und meine Sensoren eingefügt.
(Den Setup-Teil habe ich weggelassen)

Code: [Select]


void loop()

{
 {
      if (activateAlarm) {
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Alarm will be");
        lcd.setCursor(0,1);
        lcd.print("activated in");
      
        int countdown = 3; // 3 seconds count down before activating the alarm
        while (countdown != 0) {
          lcd.setCursor(13,1);
          lcd.print(countdown);
          countdown--;
          tone(buzzer, 700, 100);
          delay(1000);
        }
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Alarm Activated!");
//        initialDistance = getDistance();
        activateAlarm = false;
        alarmActivated = true;
      }

      
      if (alarmActivated == true){
          if ((digitalRead (switchPin1) == LOW) && (digitalRead (switchPin2) == LOW) && (digitalRead (switchPin3) == LOW))

     {
     lcd.setCursor(0,0);
     lcd.print("Alle Schalter");
     lcd.setCursor(0,1);
     lcd.print("geschlossen!");
     Serial.println ("Alle Schalter geschlossen!");
     noTone (buzzer);
     digitalWrite(LedGreen,HIGH);
     digitalWrite(LedRed,LOW);
     }


  else if ((digitalRead (switchPin1) == HIGH) && (digitalRead (switchPin2) == LOW) && (digitalRead (switchPin3) == LOW))

    {  
     lcd.clear();  
     lcd.setCursor(0,0);
     lcd.print("Alarm");
     lcd.setCursor(0,1);
     lcd.print("Schalter 1!");
     Serial.println ("Alarm an Schalter 1!");
     tone (buzzer,200);
     digitalWrite(LedGreen,LOW);
     digitalWrite(LedRed,HIGH);
     delay (500);
     digitalWrite(LedRed,LOW);
     delay (500);      
     }
  
  else if ((digitalRead (switchPin1) == LOW) && (digitalRead (switchPin2) == HIGH) && (digitalRead (switchPin3) == LOW))

    {
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Alarm");
     lcd.setCursor(0,1);
     lcd.print("Schalter 2!");
     Serial.println ("Alarm an Schalter 2!");
     tone (buzzer,200);
     digitalWrite(LedGreen,LOW);
     digitalWrite(LedRed,HIGH);
     delay (500);
     digitalWrite(LedRed,LOW);
     delay (500);      
     }

  else if ((digitalRead (switchPin1) == LOW) && (digitalRead (switchPin2) == LOW) && (digitalRead (switchPin3) == HIGH))

    {
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Alarm");
     lcd.setCursor(0,1);
     lcd.print("Schalter 3!");
     Serial.println ("Alarm an Schalter 3!");
     tone (buzzer,200);
     digitalWrite(LedGreen,LOW);
     digitalWrite(LedRed,HIGH);
     delay (500);
     digitalWrite(LedRed,LOW);
     delay (500);      
     }    
  

  else if ((digitalRead (switchPin1) == HIGH) && (digitalRead (switchPin2) == HIGH) && (digitalRead (switchPin3) == LOW))

    {
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Alarm");
     lcd.setCursor(0,1);
     lcd.print("Schalter 1+2!");
     Serial.println ("Alarm an Schalter 1+2!");
     tone (buzzer,200);
     digitalWrite(LedGreen,LOW);
     digitalWrite(LedRed,HIGH);
     delay (500);
     digitalWrite(LedRed,LOW);
     delay (500);    
     }    

  else if ((digitalRead (switchPin1) == LOW) && (digitalRead (switchPin2) == HIGH) && (digitalRead (switchPin3) == HIGH))

    {
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Alarm");
     lcd.setCursor(0,1);
     lcd.print("Schalter 2+3!");
     Serial.println ("Alarm an Schalter 2+3!");
     tone (buzzer,200);
     digitalWrite(LedGreen,LOW);
     digitalWrite(LedRed,HIGH);
     delay (500);
     digitalWrite(LedRed,LOW);
     delay (500);      
     }    

  else if ((digitalRead (switchPin1) == HIGH) && (digitalRead (switchPin2) == LOW) && (digitalRead (switchPin3) == HIGH))

    {
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Alarm");
     lcd.setCursor(0,1);
     lcd.print("Schalter 1+3!");
     Serial.println ("Alarm an Schalter 1+3!");
     tone (buzzer,200);
     digitalWrite(LedGreen,LOW);
     digitalWrite(LedRed,HIGH);
     delay (500);
     digitalWrite(LedRed,LOW);
     delay (500);      
     }

  else if ((digitalRead (switchPin1) == HIGH) && (digitalRead (switchPin2) == HIGH) && (digitalRead (switchPin3) == HIGH))

    {
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Alarm");
     lcd.setCursor(0,1);
     lcd.print("Schalter 1+2+3!");
     Serial.println ("Alarm an Schalter 1+2+3");
     tone (buzzer,200);
     digitalWrite(LedGreen,LOW);
     digitalWrite(LedRed,HIGH);
     delay (500);
     digitalWrite(LedRed,LOW);
     delay (500);      
     }              
 
            tone(buzzer, 1000); // Send 1KHz sound signal
            lcd.clear();
            enterPassword();
          }
        }
      if (!alarmActivated) {
        if (screenOffMsg == 0 ){
          lcd.clear();
          lcd.setCursor(0,0);
          lcd.print("A - Activate");
          lcd.setCursor(0,1);
          lcd.print("B - Change Pass");
          screenOffMsg = 1;
        }
        keypressed = myKeypad.getKey();
         if (keypressed =='A'){        //If A is pressed, activate the alarm
          tone(buzzer, 1000, 200);
          activateAlarm = true;            
        }
        else if (keypressed =='B') {
          lcd.clear();
          int i=1;
          tone(buzzer, 2000, 100);
          tempPassword = "";
          lcd.setCursor(0,0);
          lcd.print("Current Password");
          lcd.setCursor(0,1);
          lcd.print(">");
          passChangeMode = true;
          passChanged = true;  
          while(passChanged) {      
          keypressed = myKeypad.getKey();
          if (keypressed != NO_KEY){
            if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' ||
                keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' ||
                keypressed == '8' || keypressed == '9' ) {
             tempPassword += keypressed;
             lcd.setCursor(i,1);
             lcd.print("*");
             i++;
             tone(buzzer, 2000, 100);
            }
          }
          if (i > 5 || keypressed == '#') {
            tempPassword = "";
            i=1;
            lcd.clear();
            lcd.setCursor(0,0);
            lcd.print("Current Password");
            lcd.setCursor(0,1);
            lcd.print(">");
          }
          if ( keypressed == '*') {
            i=1;
            tone(buzzer, 2000, 100);
            if (password == tempPassword) {
              tempPassword="";
              lcd.clear();
              lcd.setCursor(0,0);
              lcd.print("Set New Password");
              lcd.setCursor(0,1);
              lcd.print(">");
              while(passChangeMode) {
                keypressed = myKeypad.getKey();
                if (keypressed != NO_KEY){
                  if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' ||
                      keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' ||
                      keypressed == '8' || keypressed == '9' ) {
                    tempPassword += keypressed;
                    lcd.setCursor(i,1);
                    lcd.print("*");
                    i++;
                    tone(buzzer, 2000, 100);
                  }
                }
                if (i > 5 || keypressed == '#') {
                  tempPassword = "";
                  i=1;
                  tone(buzzer, 2000, 100);
                  lcd.clear();
                  lcd.setCursor(0,0);
                  lcd.print("Set New Password");
                  lcd.setCursor(0,1);
                  lcd.print(">");
                }
                if ( keypressed == '*') {
                  i=1;
                  tone(buzzer, 2000, 100);
                  password = tempPassword;
                  passChangeMode = false;
                  passChanged = false;
                  screenOffMsg = 0;
                }            
              }
            }
          }
        }
       }
     }
    }



Soweit funktionoert der Sketch und es gibt keine Fehlermeldung.
Das einzige Problem ist, dass wenn ich den Alarm aktiviere zuerst der Countdown gestartet wird und dann direkt die Alarmmeldung kommt, obwohl alle Türen geschlossen sind.
Leider kann ich den Fehler nicht finden ... :-(
Über eure Hilfe wäre ich von Herzen dankbar!

Lieben Gruß,
Simon

HotSystems

Ein Sketch ist nur mit dem Setup komplett.

Wie sollen wir prüfen, ob alles richtig ist, wenn die Hauptsache fehlt.

Und was du gepostet hast, ist kein Link, sondern eine URL.
Ein Link wäre besser.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

simon1994

sorry für die Fehler!  :smiley-sweat:
Leider kann man ja nur 9000 Zeichen benutzen ... deswegen hatte ich nur einen Teil zeigen können. Aber jetzt habe ich hier den Setup und in 5 Minuten kommt denn der Loop-Teil  ;)

Code: [Select]

#include <LiquidCrystal.h>
#include <Keypad.h>
int screenOffMsg = 0;
const byte switchPin1 = 46;
const byte switchPin2 = 47;
const byte switchPin3 = 48;
const int buzzer = 49;
const int LedRed = 44;
const int LedGreen = 45;
String password = "0000";
String tempPassword;
boolean activated = false; // State of the alarm
boolean isActivated;
boolean activateAlarm = false;
boolean alarmActivated = false;
boolean enteredPassword; // State of the entered password to stop the alarm
boolean passChangeMode = false;
boolean passChanged = false;
const byte ROWS = 4;
const byte COLS = 4;

char keypressed;
char keyMap[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};

byte rowPins[ROWS] = {14, 15, 16, 17}; //Row pinouts of the keypad
byte colPins[COLS] = {18, 19, 20, 21}; //Column pinouts of the keypad

Keypad myKeypad = Keypad(makeKeymap(keyMap), rowPins, colPins, ROWS, COLS);
LiquidCrystal lcd(1, 2, 4, 5, 6, 7);

void setup()
{
  lcd.begin(16,2);
//  Serial.begin (9600);
  pinMode (switchPin1, INPUT);
  pinMode (switchPin2, INPUT);
  pinMode (switchPin3, INPUT);
  pinMode (buzzer, OUTPUT);
  pinMode (LedRed, OUTPUT);
  pinMode (LedGreen, OUTPUT);
}


simon1994

Hier der Loop-Teil 1:

Code: [Select]

void loop()

{
 {
      if (activateAlarm) {
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Alarm will be");
        lcd.setCursor(0,1);
        lcd.print("activated in");
      
        int countdown = 3; // 3 seconds count down before activating the alarm
        while (countdown != 0) {
          lcd.setCursor(13,1);
          lcd.print(countdown);
          countdown--;
          tone(buzzer, 700, 100);
          delay(1000);
        }
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Alarm Activated!");
//        initialDistance = getDistance();
        activateAlarm = false;
        alarmActivated = true;
      }

      
      if (alarmActivated == true){
          if ((digitalRead (switchPin1) == LOW) && (digitalRead (switchPin2) == LOW) && (digitalRead (switchPin3) == LOW))

     {
     lcd.setCursor(0,0);
     lcd.print("Alle Schalter");
     lcd.setCursor(0,1);
     lcd.print("geschlossen!");
     Serial.println ("Alle Schalter geschlossen!");
     noTone (buzzer);
     digitalWrite(LedGreen,HIGH);
     digitalWrite(LedRed,LOW);
     }


  else if ((digitalRead (switchPin1) == HIGH) && (digitalRead (switchPin2) == LOW) && (digitalRead (switchPin3) == LOW))

    {  
     lcd.clear();  
     lcd.setCursor(0,0);
     lcd.print("Alarm");
     lcd.setCursor(0,1);
     lcd.print("Schalter 1!");
     Serial.println ("Alarm an Schalter 1!");
     tone (buzzer,200);
     digitalWrite(LedGreen,LOW);
     digitalWrite(LedRed,HIGH);
     delay (500);
     digitalWrite(LedRed,LOW);
     delay (500);      
     }
  
  else if ((digitalRead (switchPin1) == LOW) && (digitalRead (switchPin2) == HIGH) && (digitalRead (switchPin3) == LOW))

    {
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Alarm");
     lcd.setCursor(0,1);
     lcd.print("Schalter 2!");
     Serial.println ("Alarm an Schalter 2!");
     tone (buzzer,200);
     digitalWrite(LedGreen,LOW);
     digitalWrite(LedRed,HIGH);
     delay (500);
     digitalWrite(LedRed,LOW);
     delay (500);      
     }

  else if ((digitalRead (switchPin1) == LOW) && (digitalRead (switchPin2) == LOW) && (digitalRead (switchPin3) == HIGH))

    {
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Alarm");
     lcd.setCursor(0,1);
     lcd.print("Schalter 3!");
     Serial.println ("Alarm an Schalter 3!");
     tone (buzzer,200);
     digitalWrite(LedGreen,LOW);
     digitalWrite(LedRed,HIGH);
     delay (500);
     digitalWrite(LedRed,LOW);
     delay (500);      
     }    
  

  else if ((digitalRead (switchPin1) == HIGH) && (digitalRead (switchPin2) == HIGH) && (digitalRead (switchPin3) == LOW))

    {
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Alarm");
     lcd.setCursor(0,1);
     lcd.print("Schalter 1+2!");
     Serial.println ("Alarm an Schalter 1+2!");
     tone (buzzer,200);
     digitalWrite(LedGreen,LOW);
     digitalWrite(LedRed,HIGH);
     delay (500);
     digitalWrite(LedRed,LOW);
     delay (500);    
     }    

  else if ((digitalRead (switchPin1) == LOW) && (digitalRead (switchPin2) == HIGH) && (digitalRead (switchPin3) == HIGH))

    {
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Alarm");
     lcd.setCursor(0,1);
     lcd.print("Schalter 2+3!");
     Serial.println ("Alarm an Schalter 2+3!");
     tone (buzzer,200);
     digitalWrite(LedGreen,LOW);
     digitalWrite(LedRed,HIGH);
     delay (500);
     digitalWrite(LedRed,LOW);
     delay (500);      
     }    

  else if ((digitalRead (switchPin1) == HIGH) && (digitalRead (switchPin2) == LOW) && (digitalRead (switchPin3) == HIGH))

    {
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Alarm");
     lcd.setCursor(0,1);
     lcd.print("Schalter 1+3!");
     Serial.println ("Alarm an Schalter 1+3!");
     tone (buzzer,200);
     digitalWrite(LedGreen,LOW);
     digitalWrite(LedRed,HIGH);
     delay (500);
     digitalWrite(LedRed,LOW);
     delay (500);      
     }

  else if ((digitalRead (switchPin1) == HIGH) && (digitalRead (switchPin2) == HIGH) && (digitalRead (switchPin3) == HIGH))

    {
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Alarm");
     lcd.setCursor(0,1);
     lcd.print("Schalter 1+2+3!");
     Serial.println ("Alarm an Schalter 1+2+3");
     tone (buzzer,200);
     digitalWrite(LedGreen,LOW);
     digitalWrite(LedRed,HIGH);
     delay (500);
     digitalWrite(LedRed,LOW);
     delay (500);      
     }              
 
            tone(buzzer, 1000); // Send 1KHz sound signal
            lcd.clear();
            enterPassword();
          }
        }
      if (!alarmActivated) {
        if (screenOffMsg == 0 ){
          lcd.clear();
          lcd.setCursor(0,0);
          lcd.print("A - Activate");
          lcd.setCursor(0,1);
          lcd.print("B - Change Pass");
          screenOffMsg = 1;
        }
        keypressed = myKeypad.getKey();
         if (keypressed =='A'){        //If A is pressed, activate the alarm
          tone(buzzer, 1000, 200);
          activateAlarm = true;            
        }
        else if (keypressed =='B') {
          lcd.clear();
          int i=1;
          tone(buzzer, 2000, 100);
          tempPassword = "";
          lcd.setCursor(0,0);
          lcd.print("Current Password");
          lcd.setCursor(0,1);
          lcd.print(">");
          passChangeMode = true;
          passChanged = true;  
          while(passChanged) {      
          keypressed = myKeypad.getKey();
          if (keypressed != NO_KEY){
            if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' ||
                keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' ||
                keypressed == '8' || keypressed == '9' ) {
             tempPassword += keypressed;
             lcd.setCursor(i,1);
             lcd.print("*");
             i++;
             tone(buzzer, 2000, 100);
            }
          }
          if (i > 5 || keypressed == '#') {
            tempPassword = "";
            i=1;
            lcd.clear();
            lcd.setCursor(0,0);
            lcd.print("Current Password");
            lcd.setCursor(0,1);
            lcd.print(">");
          }
          if ( keypressed == '*') {
            i=1;
            tone(buzzer, 2000, 100);
            if (password == tempPassword) {
              tempPassword="";
              lcd.clear();
              lcd.setCursor(0,0);
              lcd.print("Set New Password");
              lcd.setCursor(0,1);
              lcd.print(">");
              while(passChangeMode) {
                keypressed = myKeypad.getKey();
                if (keypressed != NO_KEY){
                  if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' ||
                      keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' ||
                      keypressed == '8' || keypressed == '9' ) {
                    tempPassword += keypressed;
                    lcd.setCursor(i,1);
                    lcd.print("*");
                    i++;
                    tone(buzzer, 2000, 100);
                  }
                }
                if (i > 5 || keypressed == '#') {
                  tempPassword = "";
                  i=1;
                  tone(buzzer, 2000, 100);
                  lcd.clear();
                  lcd.setCursor(0,0);
                  lcd.print("Set New Password");
                  lcd.setCursor(0,1);
                  lcd.print(">");
                }
                if ( keypressed == '*') {
                  i=1;
                  tone(buzzer, 2000, 100);
                  password = tempPassword;
                  passChangeMode = false;
                  passChanged = false;
                  screenOffMsg = 0;
                }            
              }
            }
          }
        }
       }
     }
    }

simon1994

Hier der Loop-Teil 2:

Code: [Select]


void enterPassword() {
      int k=5;
      tempPassword = "";
      activated = true;
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print(" *** ALARM *** ");
      lcd.setCursor(0,1);
      lcd.print("Pass>");
          while(activated) {
          keypressed = myKeypad.getKey();
          if (keypressed != NO_KEY){
            if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' ||
                keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' ||
                keypressed == '8' || keypressed == '9' ) {
              tempPassword += keypressed;
              lcd.setCursor(k,1);
              lcd.print("*");
              k++;
            }
          }
          if (k > 9 || keypressed == '#') {
            tempPassword = "";
            k=5;
            lcd.clear();
            lcd.setCursor(0,0);
            lcd.print(" *** ALARM *** ");
            lcd.setCursor(0,1);
            lcd.print("Pass>");
          }
          if ( keypressed == '*') {
            if ( tempPassword == password ) {
              activated = false;
              alarmActivated = false;
              noTone(buzzer);
              screenOffMsg = 0;
            }
            else if (tempPassword != password) {
              lcd.setCursor(0,1);
              lcd.print("Wrong! Try Again");
              delay(2000);
              lcd.clear();
              lcd.setCursor(0,0);
              lcd.print(" *** ALARM *** ");
              lcd.setCursor(0,1);
              lcd.print("Pass>");
            }
          }    
        }
    }

postmaster-ino

Hi

Schreibe direkt, wie die Taster angeschlossen sind.
Wenn ich Deinen Sketch bisher richtig deute, liegen die Taster-Pins bei unbetätigten Tastern 'in der Luft' und empfangen Störungen (z.B. Radio).
Du musst Deine Taster-Pins in die Gegenrichtung 'ziehen' - dafür nimmt man Pull-Widerstände - also Pull-UP (ziehe nach Oben) bzw. Pull-DN(oder-DOWN, ziehe nach Unten) - Widerstandswert ist eher unktitisch.
Der Arduino hat innen selber Pull-UPs verbaut - wenn Du Deine Taster gegen GND schaltest und die PullUPs aktivierst, musst Du 'nur noch' Dein Programm 'umdrehen'.

Stichwort - Du hast 7 Alarm-Meldungen - Die kannst Du prima zusammen fassen - wenn der Taster 1 gedrückt ist, gibt's einen Alarm vom Taster 1.
Wenn Taster 2 gedrückt ist, Gleiches von Nummer Zwei.
Wenn Taster 1 und Taster 2 gedrückt sind, gibt's halt beide Meldungen.
Du kommst mit 3 Prüfungen aus, statt mit 7 (1,2,3,1+2,2+3,1+3,1+2+3).

MfG

PS: Das waren aber kurze 5 Minuten :o

simon1994

Vielen Dank für die schnelle Antwort!
Das mit den Alarmmeldung werde ich noch umsetzen.


Also bei dem Sensor handelt es sich um folgenden:

https://www.reichelt.de/entwicklerboards-bumpsensor-debo-sen-bump-p161491.html?&trstct=pos_0

Den habe ich wie folgt angeschlossen:

GND auf GND
VCC über 1kOhm auf 5V
OUT auf Pin 46/47/48

Bei der Konstellation müsse es sich um einen Pull-Up-Resistor handeln, oder?

Ich denke aber nicht, dass hier das Problem liegt.
Wenn ich den ersten Sketch hochlade, dann funktioniert ja alles einwandfrei! ...

postmaster-ino

Hi

So wie der Taster aussieht, ist Da bereits 'Alles, was man so braucht, drauf'.
Ist Das eine LED, Die dem Zustand des Taster entspricht?
Vcc und GND gehören direkt auf die Versorgungsspannung - der 1kΩ zwischen Taster-Vcc und Vcc bringt Dir Nichts.
WENN, dann zwischen Vcc (oder GND) und Vout - dann wäre der 1kΩ ein Pull-UP (-> Vcc) oder Pull-DN(->GND).
Wobei Du Pull-UP auch durch INPUT_PULLUP erreichen kannst (dann aber mit 10...20kΩ intermen Pull-UP-Widerstand).

Bekommst Du an VOut Vcc und GND, je nachdem, wie der Taster steht?
Dann solltest Du aber gar keinen Pull-Widerstand brauchen - leider ist die Platine so primitiv, daß es nicht für ein Datenblatt gereicht hat - und SMD ist noch weit von mir entfernt ;)

MfG

simon1994

Ja genau ... An den Tastern ist eine LED.
Im gedrückten (geschlossenem) Zustand leuchtet die LED und sobald die Tür geöffnet wird geht die LED aus.

So wie ich das erkennen kann funktionieren die Taster einwandfrei.

Vielleicht kann ich das Problem nochmal genauer beschreiben ...
also ich lade den Sketch hoch und es funktioniert alles (so wie in dem Video gezeigt) das LCD-Display zeigt "A-Activate" und "B-Change Pass"
Wenn ich auf B drücke kann ich auch das Passwort änder und er übernimmt das auch ...
Wenn ich auf "A" drücke, dann kommt der Countdown von drei Sekunden und dann direkt "***ALARM*** Pass>".
Wenn ich dnn das Passwort eingebe geht der Buzzer wieder aus und ich bin auf dem Startbildschirm.
Es kommt halt nicht die Meldung "Alle Schalter geschlossen" so wie bei meinem ersten Sketch.

postmaster-ino

Hi

Welche(r) Schalter löst denn aus?

MfG

simon1994

Ich habe das Problem gefunden!  :o
Es lag am Programm!

Diese Zeilen:

tone(buzzer, 1000);
lcd.clear();
enterPassword();



standen außerhalb der If-Schleife ...
somit hat der Alarm immer ausgelöst!  ;)
Ich habe die drei zeilen jeweils bei den Alarmen eingefügt und schon läuft der Hobel!


Aber ich danke euch für die Hilfe!

postmaster-ino

Hi

Danke für das Feedback - Glückwunsch, daß Du Deinen ersten Sketch selber de-bug-t hast!

MfG

Go Up