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