Code Problem Anfänger

Nabend liebe Community,

Ich versuche aktuell ein Programm zu schreiben welches mir folgendes können soll:

Hauptsächlich soll ein Motor etwas bewegen. In beide Richtungen gibt es jeweils einen Endschalter. Sobald dieser erreicht ist soll der Motor stoppen. (Das klappt auch soweit)
Über ein 3x4 Tastenfeld soll der Motor per Passwort in beide Richtungen gesteuert werden.
Quasi wie ein Schloss....
Fürs öffnen brauch man ein Passwort und fürs schließen jeglich die * Taste.

Nun zu meinem Problem:
Sobald ich einmal das "Schloss" geöffnet habe und es dann wieder schließe, lässt es sich nicht mehr öffnen....
Habe schon mehrere Sachen probiert und überlegt wo das Programm vielleicht hängen könnte aber ich stehe absolut auf dem Schlauch....

Das ist mein Code:


#include <Keypad.h>                //einfügen der Bibiliothek Keypad um das 3x4 Tastenfeld anzusprechen


int ES_status_auf = 0;            
int ES_status_zu = 0;
int Motor_zu = 10;
int Motor_auf = 11;
int ES_auf = 12;
int ES_zu = 13;




const int ROW_NUM = 4;                   // das Tastenfeld hat 4 Spalten
const int COLUMN_NUM = 3;                // das Tastenfeld hat 3 Zeilen

char keys[ROW_NUM][COLUMN_NUM] = {      // Deklarierung der Matrix des Tastenfeldes
 
{ '#', '0', '*' },
{ '9', '8', '7' },
{ '6', '5', '4' },
{ '3', '2', '1' }
};

byte pin_rows[ROW_NUM] = {9, 8, 7, 6};       //
byte pin_column[COLUMN_NUM] = {5, 4, 3};     //

Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM );

const String password = "1234";              //Passwort deklarieren
String input_password;                       //Variable für das eingegebene Passwort deklarieren

void setup(){
  Serial.begin(9600);
  input_password.reserve(32);                //maximale Anzahl an Zeichen für das Passwort


  pinMode(ES_auf, INPUT);
  pinMode(ES_zu, INPUT);
  pinMode(Motor_auf, OUTPUT);
  pinMode(Motor_zu, OUTPUT);




}

void loop(){
  char key = keypad.getKey();            //unter der Variable key wird der eingegebene Smbol angegeben


   
   

  if (key){
    Serial.println(key);                //im seriellen Monitor Wird die eingabe eingezeigt

    if(key == '*') {
      Serial.println("Schloss geschlossen");       //wenn * gedrückt wird, schließt das Schloss und es wird "Schloss geschlossen" im seriellen Monitor ausgegeben
      input_password = "";
      while(ES_status_zu == LOW){                  
        digitalWrite(Motor_zu, HIGH);{
         ES_status_zu=digitalRead(ES_zu);          //das Schloss schließt solange bis der Endschalter ein HIGH Signal ausgibt
        if(ES_status_zu == HIGH){                  // sobald der Endschalter ein HIGH Signal ausgibt, stoppt der Motor
           digitalWrite(Motor_zu, LOW);
        }
        }
        }
    } else if(key == '#') {                        //wenn # gedrückt wird, wird das eingegebene passwort mit dem vorgegebenen Passwort verglichen
      if(password == input_password) {             
        Serial.println("Schloss offen");           //wenn es gleich ist erscheint die Status Meldung "Schloss offen" im seriellen Monitor und das Schloss öffnet sich
        while(ES_status_auf == LOW){      
        digitalWrite(Motor_auf, HIGH);{
        ES_status_auf=digitalRead(ES_auf);
        if(ES_status_auf == HIGH) {                //wenn der Endschalter ein HIGH Signal ausgibt, stoppt der Motor
          digitalWrite(Motor_auf, LOW);
        }
        }
        }
      } else {
        Serial.println("FALSCHES PASSWORT!!!");   //Falls das Passwort nicht mit dem vorgegebenen Passwort übereinstimmt wird eine Meldung ausgegeben "FALSCHES PASSWORT!"
        digitalWrite(led, LOW);
      }

      input_password = "";                        // Das Eingabepasswort wird zurück gesetzt
    } else {
      input_password += key;                      // Wenn # nicht gedrückt wird, wird ein neues Zeichen an das Eingabepasswort gehängt
    }
  }
}

Würde mich über eure Hilfe/Ideen wahnsinnig freuen,
Egrot :smiley:

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden. Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.

mfg ein Moderator.

1 Like

Wie sieht deine serielle Ausgabe aus? (Kopieren Einfügen)

#include <Keypad.h>                //einfügen der Bibiliothek Keypad um das 3x4 Tastenfeld anzusprechen

const int ROW_NUM = 4;                   // das Tastenfeld hat 4 Spalten
const int COLUMN_NUM = 3;                // das Tastenfeld hat 3 Zeilen

char keys[ROW_NUM][COLUMN_NUM] = {      // Deklarierung der Matrix des Tastenfeldes
  { '#', '0', '*' },
  { '9', '8', '7' },
  { '6', '5', '4' },
  { '3', '2', '1' }
};

byte pin_rows[ROW_NUM] = {9, 8, 7, 6};       //
byte pin_column[COLUMN_NUM] = {5, 4, 3};     //

Keypad keypad(makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM );

const byte Motor_zu = 10;
const byte Motor_auf = 11;
const byte ES_auf = 12;
const byte ES_zu = 13;
const String password = "1234";              //Passwort deklarieren
String input_password = "";                     //Variable für das eingegebene Passwort deklarieren
bool istSafeZu = false;

void setup() {
  Serial.begin(9600);
  input_password.reserve(32);                //maximale Anzahl an Zeichen für das Passwort
  pinMode(ES_auf, INPUT);
  pinMode(ES_zu, INPUT);
  pinMode(Motor_auf, OUTPUT);
  pinMode(Motor_zu, OUTPUT);
}

void loop() {
  char key = keypad.getKey();            //unter der Variable key wird der eingegebene Smbol angegeben
  if (key != NO_KEY) {
    Serial.println(key);                //im seriellen Monitor Wird die eingabe eingezeigt
    switch (key) {
      case '*':
        if (!istSafeZu) {
          Serial.println("Schloss wird geschlossen");       //wenn * gedrückt wird, schließt das Schloss und es wird "Schloss geschlossen" im seriellen Monitor ausgegeben
          input_password = "";
          digitalWrite(Motor_zu, HIGH);
          while (digitalRead(ES_zu) == LOW);        //das Schloss schließt solange bis der Endschalter ein HIGH Signal ausgibt
          digitalWrite(Motor_zu, LOW);
          istSafeZu = true;
        }
        break;
      case '#':                       //wenn # gedrückt wird, wird das eingegebene passwort mit dem vorgegebenen Passwort verglichen
        if (istSafeZu) {
          if (password == input_password) {
            Serial.println("Schloss wird geöffnet");           //wenn es gleich ist erscheint die Status Meldung "Schloss offen" im seriellen Monitor und das Schloss öffnet sich
            digitalWrite(Motor_auf, HIGH);
            while (digitalRead(ES_auf) == LOW);
            digitalWrite(Motor_auf, LOW);
            istSafeZu = false;
          } else {
            Serial.println("FALSCHES PASSWORT!!!");   //Falls das Passwort nicht mit dem vorgegebenen Passwort übereinstimmt wird eine Meldung ausgegeben "FALSCHES PASSWORT!"
            //        digitalWrite(led, LOW);
          }
          input_password = "";                        // Das Eingabepasswort wird zurück gesetzt
        }
        break;
      default:
        input_password += key;                      // Wenn # nicht gedrückt wird, wird ein neues Zeichen an das Eingabepasswort gehängt
        break;
    }
  }
}

?

?

Ist was?

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.